taeko111
@taeko111

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Pleasanterより開いている画面の情報をExcelテンプレート出力したい

Pleasanterより開いている画面の情報をExcelテンプレート出力したい

Pleasanterより開いている画面の情報をExcelテンプレート出力したいです。
Excelテンプレートは出力されましたが、開いているデータIDの取得方法で困っています。
ご教授をお願い致します。

###自分で試した事
①記録テーブルを作成します。

②記録テーブルのスクリプトへ以下を作成しました。
ここで、新規作成 編集画面の下記にEXCEL出力ボタンが表示されます。

$p.events.on_editor_load = function () {
  $('#GoBack').after('<button id="ID" class="button button-icon ui-button ui-corner-all ui-widget applied" type="button" onclick="excel02();" data-icon="ui-icon-calculator"><span class="ui-button-icon ui-icon ui-icon-calculator"></span><span class="ui-button-icon-space"> </span>Excel出力</button>');
};

③記録テーブルのHTMLへ下記を作成しました。
ここで、新規作成 編集画面の下記のEXCEL出力ボタンが押されると
function excel02(obj)が呼び出されます。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
<script type="text/javascript">
 
function excel02(obj) {
  alert(obj)
  event.stopPropagation();
  const em = new PleasanterExcelMaker();
  em.ExcelDownloadItemAttach(80015,'A','wbs_excel02.xlsx')
  .then(function(value){
    workbook = value;
    let data = {"ApiVersion": 1.0, "View": em.getFilter()}
    data.View.ApiDataType = "KeyValues";
    data.View.ApiColumnKeyDisplayType = "ColumnName";
    data.View.GridColumns = ["IssueId","Ver","Title","Body","StartTime","CompletionTime","WorkValue","ProgressRate","RemainingWorkValue","Status","ClassA","ClassB","ClassC","Owner","Manager"];
    alert(value)

    em.ApiGet(80020, data)
    .then(function(value){
      workbook.worksheets[0].name = "サンプル02";
      let sheet = workbook.worksheets[0];
      const rset = value.data.Response.Data;
      if( Object.keys(rset).length == 1 ) {
          sheet.getCell(`B3`).value = rset[0].IssueId;
          sheet.getCell(`B4`).value = rset[0].ClassA;
          sheet.getCell(`B5`).value = rset[0].ClassB;
          sheet.getCell(`B6`).value = rset[0].ClassC;
          sheet.getCell(`B7`).value = rset[0].Title;
          sheet.getCell(`B8`).value = rset[0].Body;
          sheet.getCell(`B9`).value = rset[0].Manager;
          sheet.getCell(`B10`).value = rset[0].Owner;
          let t;
          t = new Date(rset[0].StartTime);
          sheet.getCell(`B11`).value = t.getFullYear() + "/" + (t.getMonth()+1) + "/" + t.getDate();
          t = new Date(rset[0].CompletionTime);
          sheet.getCell(`B12`).value = t.getFullYear() + "/" + (t.getMonth()+1) + "/" + t.getDate();
          sheet.getCell(`B13`).value = rset[0].WorkValue;
          sheet.getCell(`B13`).numFmt = '0"h"'
          sheet.getCell(`B14`).value = rset[0].ProgressRate;
          sheet.getCell(`B14`).numFmt = '0.0"%"'
          sheet.getCell(`B15`).value = rset[0].RemainingWorkValue;
          sheet.getCell(`B15`).numFmt = '0.0"h"'
          sheet.getCell(`B16`).value = rset[0].Status;
          sheet.getCell(`B17`).value = rset[0].Ver;
        }
        em.SaveAs(workbook);
    });
  });
}
</script>
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

④記録テーブルへEXCELテンプレートファイルを添付します。

###困っている事
上の処理でEXCELテンプレートファイルは出力されましたが、
★★スクリプトの function excel02(obj) で
em.ApiGet(80020, data) の箇所があります。80020の箇所を
開いているデータIDにしたいです。

どうぞよろしくお願いいたします。

0

1Answer

Pleasanterでは、開いているデータIDを取得するためには、編集画面で表示されているレコードのIDを動的に取得する必要があります。具体的には、JavaScriptを使用して現在開いているレコードの情報を取得し、それをem.ApiGetのパラメータに設定することで、開いているデータに対応する情報をExcelに出力できます。

下記のように編集画面のデータID(IssueIdなど)を取得するための方法を追加してみてください。

手順
editor_loadイベントで、Pleasanterが提供するオブジェクトから開いているデータのIDを取得します。Pleasanterでは、GetEditor関数を使用してデータにアクセスできるので、それを利用します。

excel02関数内で取得したデータIDを利用してApiGet関数に引き渡します。

サンプルコード
javascript
コードをコピーする
$p.events.on_editor_load = function () {
// データIDの取得
var dataId = $p.localStorage.issueId;

// Excel出力ボタンの作成
$('#GoBack').after(' Excel出力');
};

function excel02(dataId) {
alert("データID: " + dataId); // デバッグ用アラート

event.stopPropagation();
const em = new PleasanterExcelMaker();
em.ExcelDownloadItemAttach(80015,'A','wbs_excel02.xlsx')
.then(function(value){
workbook = value;
let data = {"ApiVersion": 1.0, "View": em.getFilter()}
data.View.ApiDataType = "KeyValues";
data.View.ApiColumnKeyDisplayType = "ColumnName";
data.View.GridColumns = ["IssueId","Ver","Title","Body","StartTime","CompletionTime","WorkValue","ProgressRate","RemainingWorkValue","Status","ClassA","ClassB","ClassC","Owner","Manager"];

// 取得したデータIDを使ってAPIを呼び出す
em.ApiGet(dataId, data)
.then(function(value){
  workbook.worksheets[0].name = "サンプル02";
  let sheet = workbook.worksheets[0];
  const rset = value.data.Response.Data;
  if( Object.keys(rset).length == 1 ) {
      sheet.getCell(`B3`).value = rset[0].IssueId;
      sheet.getCell(`B4`).value = rset[0].ClassA;
      sheet.getCell(`B5`).value = rset[0].ClassB;
      sheet.getCell(`B6`).value = rset[0].ClassC;
      sheet.getCell(`B7`).value = rset[0].Title;
      sheet.getCell(`B8`).value = rset[0].Body;
      sheet.getCell(`B9`).value = rset[0].Manager;
      sheet.getCell(`B10`).value = rset[0].Owner;
      let t;
      t = new Date(rset[0].StartTime);
      sheet.getCell(`B11`).value = t.getFullYear() + "/" + (t.getMonth()+1) + "/" + t.getDate();
      t = new Date(rset[0].CompletionTime);
      sheet.getCell(`B12`).value = t.getFullYear() + "/" + (t.getMonth()+1) + "/" + t.getDate();
      sheet.getCell(`B13`).value = rset[0].WorkValue;
      sheet.getCell(`B13`).numFmt = '0"h"'
      sheet.getCell(`B14`).value = rset[0].ProgressRate;
      sheet.getCell(`B14`).numFmt = '0.0"%"'
      sheet.getCell(`B15`).value = rset[0].RemainingWorkValue;
      sheet.getCell(`B15`).numFmt = '0.0"h"'
      sheet.getCell(`B16`).value = rset[0].Status;
      sheet.getCell(`B17`).value = rset[0].Ver;
    }
    em.SaveAs(workbook);
});

});
}
説明
$p.localStorage.issueId: 現在編集中のデータのIssueIdを取得しています。
onclick="excel02(' + dataId + ');": Excel出力ボタンを押すとexcel02関数に取得したdataIdを引数として渡します。
em.ApiGet(dataId, data): 取得したデータIDを使用してAPIからデータを取得しています。
このようにすることで、開いているデータIDを動的に取得し、そのデータに基づいたExcel出力が可能になるはずです。

1Like

Comments

  1. @taeko111

    Questioner

    有難うございました。上手く開いている画面のデータのExcelが出力されました。
    分かりやすいご指導本当に有難うございました。
    まだまだ、これからですが、、、
    また、質問投稿させていただく時はご指導をお願い致します。

Your answer might help someone💌