ITメモ

ITのこと学習中

Business CentralでPower Automateの自動フローを使ってTeamsに連携する

Business Centralから自動フローを使ってTeamsへの通知機能ができるようになってます。新しいPower Automate flowのテンプレートが追加されました。

この例では、Sales InvoiceがPostされたらTeamsへ自動で投稿します。

 

1)自動フローの作成を選択

Customerカードを開いて、自動化→Power Automate→自動フローの作成をクリックします。

自動化>Power Automate>自動フローの作成

2)フローを作成
「Notify on Teams when a sales invoice is posted in Business Central(Business CentralでSales InvoiceをPostしたときにTeamsに通知を送る)」を選択しクリックします。

Notify on Teams when a sales invoice is posted in Business Central

Business Centralの環境情報と投稿するTeamsの情報(チームとチャンネル)を入力し、「フローの作成」をクリックすると、Power Automate flowが作成され完了です。

Business Central接続情報入力画面

Power Automate側で自動で作成されたフローはこんな感じです。

Power Automate flow: Notify on Teams when a sales invoice is posted in Business Central

 

それではSales Orderを作成して、Postして確認してみましょう。

Sales OrderをPostすると、Teamsにアダプティブカードが投稿されました。

The Adaptive card is posted after posted the Sales Order on Business Central.

他のユーザーでも確認します。まず、Business Centralライセンスを付与されているユーザー(Aliciaさん)の場合、Teamsで確認ができます。また、Detailsをクリックすると、TeamsからBusiness CentralのPosted Sales Invoiceを表示して内容の確認ができます。

Teamsの投稿とBCの詳細情報

同様に、Microsoft 365のみライセンスユーザー(Williamさん)の場合はどうでしょうか。Teamsのアダプティブカードの確認ができ、Detailsをクリックすると、Posted Sales Invoiceの内容の確認ができました。

M365ライセンスユーザーの見え方

今回、「Business CentralでSales InvoiceをPostしたときにTeamsに通知を送る」というPower Automateのフローを実行しました。Sales側ではなく、仕入側であるPurchase InvoiceまたはPurchase Receiptの処理を行ったときに、Teamsへ通知を送るようにすると、仕入品の受領を社内に通知するのに利用できます。メールのほうが良ければ、Teamsの後にメール送信を追加してもよいかもしれないですね。

 

 

AppSourceアプリの自動更新頻度設定

Business Centralにインストールしているアプリの自動アップデートが今まではメジャーアップデートごとだったのが、これからはメジャーアップデートだけでなく、Business Centralのマイナーアップデート時も適用できるよう設定が追加されました。

オンライン版のBusiness Centralにインストールされているアプリの最新版化へのアップデートのことです。このアプリとはAppSourceからインストールしたアプリを指します。

例えば、Business Centralのバージョンがv22.5からv23.0へメジャーアップデートすると同時に、インストールしているアプリも自動で最新版にアップデートされる仕様です。v23.0からv23.1へマイナーアップデートされた場合は、インストール済みアプリは自動でアップデートされません。

2023 Release Wave 2では、マイナーアップデートでもインストール済みアプリを自動で最新バージョンへアップデートする機能が追加されました。

方法は、Dynamics 365 Business Central admin centerから、設定する環境を選択し、Apps Update Cadenceから設定します。

Apps Update Cadence on Environment in Dynamics 365 Business Central admin center

選択肢は3つで、Default、With minor and major updates、With major updates 。

With minor and major updates :マイナーとメジャーアップデートごとにアプリを更新

With major updates:メジャーアップデートごとにアプリを更新

Default:これまで同様メジャーアップデートごとにアプリを更新ですが、将来的にマイナーアップデート時もアプリを更新する予定となっています。

AppSourceアプリの更新頻度について

テナント毎に開発したアプリの更新は今まで通り。

 

 

TeamsからBusiness Centralへアクセスする

Microsoft TeamsからDynamics 365 Business Centralへアクセスすることができます。Business Centralのライセンスを付与していないM365ユーザーも、読み取り専用ですが、Teamsを通してBusiness Centralにアクセスしてデータを見ることができます。

Business Central(BC)ライセンスを持たないM365ユーザーがBCのデータを閲覧するには、以下の2点を行う必要があります。

  • TeamsにBusiness Central Appをインストールする
  • Business CentralでM365ライセンスのみユーザーがアクセスできるようにする
  • Business Centralライセンスを持つユーザーにTeams内にアクセス用のリンクを用意してもらう

TeamsにBusiness Central Appをインストールする

アプリの追加からBusiness Central Appを探して、Teamsに追加します。Teamsの管理者権限が必要ですので、管理者権限を持つ方にアプリをインストールしてもらいましょう。

TeamsにBusiness Central Appをインストールする

 

Business CentralでM365ライセンスのみユーザーがアクセスできるようにする

検索(Tell me)に「Set up access with Microsoft 365 licenses」と入力し、設定画面を開き、M365ライセンスのみのユーザーがアクセスすることを有効にする。M365ライセンスユーザーは読み込み(閲覧)のみ可能となる。

Set up Access with Microsoft 365 License

Microsoft 365 License access enabled

 

Business Centralライセンスを持つユーザーにTeams内にアクセス用のリンクを用意してもらう

Teamsの上のある「+」をクリックして、TeamsにBusiness Centralのタブを追加する。

TeamsにBusiness Centralのタブを追加

環境名、会社、タブのコンテンツを選択して「保存」をクリックすると、Business CentralへTeamsからアクセスできるようになります。この例では、Sandbox01環境の会社「CRONUS W1」のVendorsのタブを追加しています。

Business Centralライセンスを付与されているユーザーの場合、以下のように見えます。

BCライセンスユーザーのVendorリスト

Teamsから見たBCライセンスユーザーのVendor Card

ほぼ、Business Centralにアクセスしているのと同じ画面が表示されます。Vendor名をクリックするとVendor Cardも確認できますし、編集も可能です。「+」をクリックすると新規追加できます。

TeamsでAdd New Customer

 

次はCustomersリストタブを追加して、Microsoft365ライセンスのみのユーザーの場合を見てみましょう。BCライセンスユーザーにより、Customersリストが追加されました。

Customers List added by the BC license user

以下の画面はユーザーCarlosさんのTeamsです。CarlosさんはBCライセンスを付与されていないM365ライセンスのみ付与されたユーザーです。Business Centralのコンテンツ内のCustomersのところに「検索」しかないことが分かります。

M365ユーザーから見たCustomer List

同じようにCustomerの名前をクリックし、Customer cardを開くことができます。しかし、編集や新規追加、削除ができないようになっています。

Customer card by M365 user on Teams

このようにBCライセンスが無いM365ライセンスのみのユーザーもBusiness Centralのデータを閲覧することができます。データの確認をしたいだけのユーザーにBCライセンスを購入する必要はなくなります。

このM365ライセンスのユーザーもセキュリティグループの影響を受けるため、BCにアクセスできるセキュリティグループを設定している場合、Business Centralのデータを閲覧するユーザーにはセキュリティグループに追加する必要があります。セキュリティグループに追加されていないと、アクセスが拒否されます。

BC Access Denied because the user isn't added to the security group.

Financial Reportのようなアクセス都度更新が伴うようなページにもアクセスしても権限がないとしてアクセス拒否されます。

Financial Reportアクセス禁止

 

Purchase/Salesなどのデータにアクセスしたい場合、ページリンクを直接貼り付けることでアクセスができます。以下の画像ではタブ名にPO Listとし、Purchase Order リストのURLを貼り付けてTeamsのタブに登録し、M365ユーザーがアクセスしています。

URLを貼り付けてタブにする

BCライセンス保有ユーザーは、BC内のユーザー権限設定に従って、新規データ追加、編集、削除を行うことができます。

以上、簡単なTeamsからBusiness Centralへのアクセスの説明でした。

 

 

Business Centralの環境にアクセスできるユーザーを限定する

Business Centralの環境にアクセスできるM365ユーザーを限定する方法。

Dynamics 365 Business Centralのライセンスを割り当てられたユーザーはBusiness Centralにアクセスすることができます。

Dynamics 365 Business Centralには以下の環境が用意されています。

環境
Production 1
Sandbox 3

環境には名前をつけられるので、Production、Sandbox1、Sandbox2などとできます。

それぞれの環境にアクセスできるユーザーを制限するには、M365管理センターで作成できるセキュリティグループを利用してライセンスを持つユーザーのアクセス先を管理できます。

方法は簡単で、Dynamics 365 Business Central admin centerから、環境を選択し、セキュリティグループを登録するだけ。

Business Central admin center

手順

  1. M365管理センターでセキュリティグループを作成する
  2. セキュリティグループにユーザーを登録する
  3. Business Central admin center でBusiness Centralの環境にセキュリティグループを設定する

1. M365管理センターでセキュリティグループを作成する

M365管理センターの左メニューのTeams & groups からActive teams & groupsを選択します。Security groupsを選択し、Add a security groupをクリックします。クリックすると、セキュリティグループの設定画面が表示されるので、名前を登録します。環境によっては日本語になっている場合もあるので、名称等異なる場合があります。

例では、Add a security groupをクリックしてTestSecGrpを作成しました。

セキュリティグループ追加その1

セキュリティグループ追加画面

セキュリティグループ名を付けて、グループを作成する

2. 作成したセキュリティグループにオーナーとユーザーを追加します。

作成したセキュリティグループを選択すると、オーナーが登録されていないので、Add group ownersというボタンが現れます。そのボタンをクリックしAdd ownersをクリックしてM365のアクティブユーザーからオーナーを選び登録します。

セキュリティグループにオーナー追加

続いてメンバーを登録します。メンバー登録は、セキュリティグループを選択し、Members→View all and manage all members→Add membersの順に進み登録します。オーナーと同様アクティブユーザーのリストが表示されるのでメンバーを選択します。今回登録するAlanとAmyにはBusiness Centralのライセンスを付与しています。

セキュリティグループにメンバーをアランとエイミーを登録

3. セキュリティグループTESTSecGrpをBusiness Centralの環境に登録します。Business Central環境に新しくSB-Italyという環境を作成し、Security GroupにTESTSecGrpを設定します。Security GroupのModifyをクリックし、セキュリティグループにTESTSecGrpを選択します。

Security GroupにTESTSecGrpを設定

設定は以上です。これでAlanでBusiness Centralにアクセスできます。

Business Central SB-Italyにアクセス成功

別のBusiness Centralのライセンスを持つユーザーAliciaで同じSB-Italyにアクセスしてみます。

AliciaでBusiness Central SB-Italy環境にサインイン

サインインに失敗し、SB-Italy環境にアクセスできません。

アクセス権がありませんとなりBusiness Central SB-Italy環境にアクセスできない

Business Centralの別環境「Sandbox01」にサインインは可能です。

セキュリティグループ「BusinessCentral」登録内容

Alicia can sign in Sandbox01.

M365のセキュリティグループを利用して、本番運用中のProduction環境へアクセスできるユーザーと、開発を行うユーザーを分けることができ、本番運用中の環境を開発で使わせないようにすることが可能です。

 

 

Business Centralで場所別の在庫情報のレポートが欲しい その2

Business Centralで管理している場所別の在庫情報をExcelでの作成その2。今回はExcel for the webを利用。そのためBusiness CentralでExcel for the webを使えるように設定する。デフォルト設定の場合は、Excelアプリが利用できます。

Business Centralの右上の検索虫眼鏡から「OneDrive Setup」と入力し、オンラインのExcelを利用できるよう「Use with system features」を有効にします。

OneDrive SetupでUse with system featuresを有効にします

 

右上の虫眼鏡アイコン検索してItem Ledger Entriesを開き、転記日フィルターを設定します。日付範囲の指定をして何日までの総数を取得します。例では、2023/3/31までの在庫情報が欲しいので、2023/3/31まで転記日フィルターを設定しました。

Item Ledger EntriesでPosting Date フィルタを2023/3/31までとした

Item Ledger Entriesリストの右上にあるアイコンをクリックし、「Excelで開く」をクリックします。

Excelで開くをクリック

Excel for the webが開くので、ピボットテーブル機能を利用し、2023/3/31日までの場所別の在庫表の作成することができます。

Excel for the webでPivot Table作成

Serial No.やLot No.が必要な場合、Item Ledger Entriesでデフォルトでは表示されていないので、パーソナライズ機能を利用して表示させる必要があります。

データ量が多くなるので、期末処理で、Business Centralの在庫数0、金額0にして、翌期首に再度登録しなおせば1年ごとのデータのみで、Excelの負荷を減らせるかも。

 

 

Google スプレッドシートにBusiness CentralのWeb Serviceのデータ表示

Google App ScriptsでBusiness CentralのWeb Serviceを取得してGoogle SpreadSheetsに表示できないかと考えてApp Scriptsにトライ。

Business CentralのWeb Serviceで公開されているデータを取得するためにはOAuth2.0認証を行う必要があるため、App Scriptsで認証。こんな感じ

function getBCToken() {
  // Call token endpoint
  // This is a POST Request to get Token

  // Base URL
  // Grant Type
  const grantType = 'client_credentials';
  // Client ID
  const clientId = "<Client ID>";
  // Secret Key
  const clientSecret = '<Client Secret>';
  // Scope
  const scope = baseURL + '/.default';

  const formData = {
    grant_type: grantType,
    client_id: clientId,
    client_secret: clientSecret,
    scope: scope
  };
  // Get BC/AAD Access Token
  let response = UrlFetchApp.fetch('https://login.microsoftonline.com/<Tenant ID>/oauth2/v2.0/token', {
    method: 'POST',
    payload: formData,
    contentType: 'application/x-www-form-urlencoded'
    });
 
  //Json Perse
  const tokenInfo = JSON.parse(response.getContentText());
  return tokenInfo;

}

<Client Secret>、<Client ID>、<Tenant ID>は各環境に合わせて変更します。これで、OAuth2.0のトークンの取得ができました。その取得したトークンを利用してBusiness CentralのWeb Serviceで公開しているデータを取得します。

// Get Business Central Customer Info on Web Service
function getBCOdata(url) {
  // let url = "https://api.businesscentral.dynamics.com/v2.0/<Tenant ID>/<Environment Name>/ODataV4/Company('<Company Name>')/Test_CustomerLedgerEntries";

  let tokenInfo = getToken();

  let myHeaders = {
    "Authorization": tokenInfo.token_type + " " + tokenInfo.access_token
  };

  let requestOptions = {
    method: 'GET',
    headers: myHeaders,
    redirect: 'follow'
  }

  let resp = UrlFetchApp.fetch(url, requestOptions)

// console.log(JSON.parse(resp.getContentText()));
  return JSON.parse(resp.getContentText());
}
 

console.logからデバッグで出力したら、OData(JSON)形式でデータの取得ができた模様。

Sample OData from Business Central

公開済らしい import_json_appsscript.jsスクリプトに上の内容を適当に追加して、Google SpreadSheetsに出せるか確認。とりあえず表示させることができた。

Business Central Customer Ledger Entries on Google Sheets

あとは、欲しい情報に加工すればOK。

マイクロソフトExcelアプリならデータ読み込みさせられるからもっと簡単にできる。Excelオンラインはできないのはなぜ・・・?

 

Business Centralで場所別の在庫情報のレポートが欲しい

Business Centralで場所別の在庫を表示したい場合、希望のものが出てこなかったりする。そういうわけで、Business CentralのWeb ServiceとPower BIで対応してみる。参考にしたのは以下の説明。

youtu.be

Web ServiceにItemsとItem Ledger Entriesを登録して、それをPower BIからODataでデータを取得する。

Web Serviceに登録したOData URLをPower BIで読み込む。Item Ledger EntriesのItem_NoとItemsのNoにリレーションをつけたり、表示などきれいにすることで、大体30分~1時間程度で出来上がった。

Power BI Desktop画面に表示された場所別ロット番号別シリアル番号別Itemの数量と原価合計

在庫数が0のシリアル出さないとかもう少し工夫は必要かも。。。

品目別の予定数量表もこんな感じ。現在の在庫に仕入予定数と販売予定数を計算して予定の在庫数を出した感じ。

品目別在庫予測

Power BI Desktopだけであれば無料の範囲で済むのもうれしい。Power BIでオンラインで共有する場合はライセンスが必要になる。

これが実際に使えるかどうかはさておき、Business Centralで場所別でシリアルとロット番号のある在庫をリスト化するのは割と面倒。棚卸仕訳帳を使って出力する方法もあるので、Power BIなどを使わなくても出すことは可能。

BCのPhysical Inventory Journalから出力した場所別ロット別シリアル別在庫一覧