Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデモプロジェクトを構築して実行すると、Microsoft Dynamics 365 Connector の理解を深めることができます。
このデモプロジェクトを構築して実行するには、以下が必要です。
Mule 4.0 以降の Anypoint Studio。
Microsoft Dynamics 365 Connector v1.0.0 以降。
Microsoft Dynamics 365 (CRM 8.2)
以下の例には、次の <flow> 要素が含まれます。
CREATE_EMPTY_CONTACT_DEMO
後で他のフローで必要になる空の取引先責任者エンティティを作成します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createContact
CREATE_EMPTY_OPPORTUNITY_DEMO
後で他のフローで必要になる空の商談エンティティを作成します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createOpportunity
CREATE_ACCOUNT_DEMO
指定された属性を使用して取引先を作成し、さらに取引先を取引先責任者に関連付けます。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createAccount =
要求の例: {"AccountName":"Test Account Name","CreditOnHold":true,"CreditLimit":1000,"ContactID":"<ID>"}
CREATE_MULTIPLE_ENTITIES_DEMO
1 つのバッチ要求で同じ種別のエンティティを複数作成します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/createMultipleAccounts
要求の例: [{"AccountName":"Account Name 1","CreditOnHold":true,"CreditLimit":1500},{"AccountName":"Account Name 2","CreditOnHold":false,"CreditLimit":2000}]
UPDATE_MULTIPLE_ENTITIES_DEMO
1 つのバッチ要求で同じ種別のエンティティを複数更新します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/updateMultipleAccounts
要求の例: [{"EntityId":"<ID>","AccountName":"Updated Name 1"},{"EntityId":"<ID>","AccountName":"Updated Name 2"}]
DELETE_ENTITY_DEMO
指定された種別のエンティティを削除します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/deleteAccount
要求の例: {"EntityId":"<ID>"}
RETRIEVE_ENTITY_DEMO
指定された種別のエンティティを取得します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/retrieveAccount
要求の例: {"EntityId":"<ID>"}
RETRIEVE_ENTITIES_BY_URL_DEMO
URL 要求に基づいて複数のエンティティを取得します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/retrieveAccountsByURL
RETRIEVE_ENTITIES_BY_QUERY_DEMO
DataSense クエリ言語に基づいて複数のエンティティを取得します。
[GET] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/retrieveAccountsByQuery
DISASSOCIATE_ENTITIES_DEMO
エンティティの関連付けを解除します。要求を実行するエンティティの ID と関連付けを解除するキーを指定します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/disassociateEntities
要求の例: {"EntityId":"<ID>","EntityLinkKeys":["primarycontactid"]}
DO_ACTION_DEMO
WinOpportunity アクションをコールします。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/doAction
要求の例: {"Subject":"Won Opportunity","Status":3,"OpportunityId":"<OP_ID>"}
http://localhost:8081 を参照してフローをテストするか、curl のようなツールや、URL のコール時にボディの POST を実行できる他のツール (Chrome/Mozilla Firefox の拡張機能) を使用して JSON の POST を実行できます。
/src/main/resources/mule-artifact.properties で、OAuth2 ユーザー名/パスワード設定の OAuth2 ログイン情報を指定します。
config-oauth-user-pass.username
セッションを初期化するユーザー名
config-oauth-user-pass.password
ユーザーの認証に使用するパスワード
config-oauth-user-pass.resource
Web API のアプリケーション ID URI (セキュアなリソース)。CRM バージョンを指定しない、ルート URI である必要があります (例: https://<your-org>.crm2.dynamics.com/)。
config-oauth-user-pass.clientId
アプリケーションを Azure Active Directory に登録したときに割り当てられたアプリケーション ID。この ID は Azure Portal で確認できます。
config-oauth-user-pass.clientSecret
アプリケーション登録ポータルでアプリケーション用に作成したアプリケーションシークレット。クライアントシークレットは信頼のおける方法でデバイスに保存できないため、シークレットをネイティブアプリケーションで使用しないでください。シークレットは Web アプリケーションと Web API で必要です (クライアントシークレットをサーバー側で安全に保存できます)。
config-oauth-user-pass.tokenRequestEndpoint
アクセストークンを取得するためにコールされるトークンエンドポイント。例: https://login.windows.net/<tenant-id>/oauth2/token。この場合の「tenant-id」は Azure Active Directory ID です。
コネクタは DataSense 情報を提供するために複数の要求を実行するので、DataSense 接続タイムアウトは 200 秒より長く指定します。
Studio でプロジェクトを実行します。
ブラウザーで localhost:8081 と入力し、デモの選択メニューにアクセスします。
必要に応じて、[Connection Timeout (接続タイムアウト)] と [Read Timeout (読み取りタイムアウト)] を設定します。 [Connection Timeout (接続タイムアウト)] は、サーバーに初めて接続するときのタイムアウトです。 [Read Timeout (読み取りタイムアウト)] は、サーバーからのデータの読み取りを待機するときのタイムアウトです。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:dynamics="http://www.mulesoft.org/schema/mule/dynamics"
xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/dynamics
http://www.mulesoft.org/schema/mule/dynamics/current/mule-dynamics.xsd">
<configuration-properties file="mule-artifact.properties" />
<http:listener-config
name="HTTP_Listener_config"
doc:name="HTTP Listener config" >
<http:listener-connection
host="0.0.0.0"
port="8081" />
</http:listener-config>
<dynamics:dynamics-config
name="Dynamics_365_config"
doc:name="Dynamics 365 Dynamics 365" >
<dynamics:oauth-user-pass-connection
username="${config-oauth-user-pass.username}"
password="${config-oauth-user-pass.password}"
resource="${config-oauth-user-pass.resource}"
clientId="${config-oauth-user-pass.clientId}"
clientSecret="${config-oauth-user-pass.clientSecret}"
tokenRequestEndpoint="${config-oauth-user-pass.tokenRequestEndpoint}" />
</dynamics:dynamics-config>
<flow name="PARSE_DEMO_TEMPLATE">
<http:listener
config-ref="HTTP_Listener_config"
doc:name="HTTP"
path="/"/>
<parse-template
location="form.html"
doc:name="Parse Template"/>
</flow>
<flow name="CREATE_EMPTY_CONTACT_DEMO">
<http:listener
config-ref="HTTP_Listener_config"
path="/createContact" doc:name="HTTP"/>
<logger message="Requested 'Create Contact Operation'"
level="INFO" doc:name="Logger"/>
<dynamics:create config-ref="Dynamics_365_config"
logicalName="contact" doc:name="Microsoft Dynamics 365">
<dynamics:attributes ><![CDATA[#[{}]]]></dynamics:attributes>
</dynamics:create>
<logger message="#['Received Response from "Create Contact Operation":' ++ payload]" level="INFO" doc:name="Logger"/>
</flow>
<flow name="CREATE_EMPTY_OPPORTUNITY_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/createOpportunity" doc:name="HTTP"/>
<logger message="Requested 'Create Opportunity Operation'"
level="INFO" doc:name="Logger"/>
<dynamics:create config-ref="Dynamics_365_config"
logicalName="opportunity" doc:name="Microsoft Dynamics 365">
<dynamics:attributes ><![CDATA[#[{}]]]></dynamics:attributes>
</dynamics:create>
<logger message="#['Received Response from "Create Opportunity Operation": ' ++ payload]" level="INFO" doc:name="Logger"/>
</flow>
<flow name="CREATE_ACCOUNT_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/createAccount" doc:name="HTTP"/>
<logger message="Requested 'Create Account Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload>
<![CDATA[%dw 2.0
output application/java
---
{
name: payload.AccountName,
creditonhold: payload.CreditOnHold,
creditlimit: payload.CreditLimit,
"primarycontactid@odata.bind": "/contacts(" ++ payload.ContactID ++ ")"
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:create config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:attributes>#[payload]</dynamics:attributes>
</dynamics:create>
<logger message="#['Received Response from "Create Account Operation" : ' ++ payload]" level="INFO" doc:name="Logger"/>
</flow>
<flow name="CREATE_MULTIPLE_ENTITIES_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/createMultipleAccounts" doc:name="HTTP"/>
<logger message="Requested 'Create Multiple Accounts Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
input payload application/json
output application/java
---
payload map {
name: $.AccountName,
creditlimit : $.CreditLimit,
creditonhold : $.CreditOnHold
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:create-multiple config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:entities-attributes>#[payload]</dynamics:entities-attributes>
</dynamics:create-multiple>
<logger message="Received Response from 'Create Multiple Entities Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="UPDATE_ENTITY_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/updateAccount" doc:name="HTTP"/>
<logger message="Requested 'Update Entity Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
entityId: payload.EntityId,
attributes: {
creditlimit: payload.CreditLimit,
name: payload.AccountName
}
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:update config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:attributes>#[payload]</dynamics:attributes>
</dynamics:update>
<logger message="'Update Entity Operation' has ended with success"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="UPDATE_MULTIPLE_ENTITIES_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/updateMultipleAccounts" doc:name="HTTP"/>
<logger message="Requested 'Update Multiple Entities Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
input payload application/json
output application/java
---
payload map {
entityId: $.EntityId,
attributes: {
name: $.AccountName
}
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:update-multiple config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:entities-attributes>#[payload]</dynamics:entities-attributes>
</dynamics:update-multiple>
<logger message="Received Response from 'Update Multiple Entities Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="DELETE_ENTITY_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/deleteAccount" doc:name="HTTP"/>
<logger message="Requested 'Delete Entity Operation'"
level="INFO" doc:name="Logger"/>
<dynamics:delete config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:id>#[payload.EntityId]</dynamics:id>
</dynamics:delete>
<logger message="'Delete Entity Operation' has ended with success"
level="INFO" doc:name="Logger"/>
</flow>
<flow name="RETRIEVE_ENTITY_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/retrieveAccount" doc:name="HTTP"/>
<logger message="Requested 'Retrieve Entity Operation'"
level="INFO" doc:name="Logger"/>
<dynamics:retrieve config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:id>#[payload.EntityId]</dynamics:id>
</dynamics:retrieve>
<logger message="Received Response from 'Retrieve Entity Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="RETRIEVE_ENTITIES_BY_URL_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/retrieveAccountsByURL" doc:name="HTTP"/>
<logger message="Requested 'Retrieve Multiple Operation'"
level="INFO" doc:name="Logger"/>
<dynamics:retrieve-multiple config-ref="Dynamics_365_config"
doc:name="Microsoft Dynamics 365">
<dynamics:data-query-url>${config-oauth-user-pass.resource}/api/data/v8.2/accounts?$select=name,accountnumber&$top=3</dynamics:data-query-url>
</dynamics:retrieve-multiple>
<logger message="Received Response from 'Retrieve Multiple Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="RETRIEVE_ENTITIES_BY_QUERY_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/retrieveAccountsByQuery" doc:name="HTTP"/>
<logger message="Requested 'Retrieve Multiple By Query Operation'"
level="INFO" doc:name="Logger"/>
<dynamics:retrieve-multiple-by-query
config-ref="Dynamics_365_config" doc:name="Microsoft Dynamics 365">
<dynamics:query>dsql:SELECT accountid,accountnumber,name FROM accounts LIMIT 2</dynamics:query>
</dynamics:retrieve-multiple-by-query>
<logger message="Received Response from 'Retrieve Multiple By Query Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Response to JSON">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="DISASSOCIATE_ENTITIES_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/disassociateEntities" doc:name="HTTP"/>
<logger level="INFO" doc:name="Logger"
message="Requested 'Disassociate Entities Operation'"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
entityId: payload.EntityId,
attributes: payload.EntityLinkKeys
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:disassociate config-ref="Dynamics_365_config"
logicalName="account" doc:name="Microsoft Dynamics 365">
<dynamics:attributes>#[payload]</dynamics:attributes>
</dynamics:disassociate>
<logger level="INFO" doc:name="Logger"
message="Finished 'Disassociate Entities Operation' with success"/>
</flow>
<flow name="DO_ACTION_DEMO">
<http:listener config-ref="HTTP_Listener_config"
path="/doAction" doc:name="HTTP"/>
<logger message="Requested 'Do Action Operation'"
level="INFO" doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
OpportunityClose: {
subject: payload.Subject,
"opportunityid@odata.bind": "/opportunities(" ++ payload.OpportunityId ++ ")"
},
Status: payload.Status
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:do-action config-ref="Dynamics_365_config"
actionName="WinOpportunity" doc:name="Microsoft Dynamics 365"/>
<logger message="Finished 'Do Action Operation'"
level="INFO" doc:name="Logger"/>
</flow>
</mule>
Microsoft Dynamics 365 Update 操作を追加します。
必須の論理名 (小文字のスキーマの名前) を指定します。
デフォルトの省略可能な属性を定義します。エンティティ ID は、更新するエンティティインスタンスを示す必須属性です。
指定された属性を使用して取引先を更新します。
[POST] HTTP エンドポイントは次の URL をリスンします。http://localhost:8081/updateAccount
<flow name="UPDATE_ENTITY_DEMO">
<http:listener
config-ref="HTTP_Listener_config"
path="/updateAccount"
doc:name="HTTP"/>
<logger
message="Requested 'Update Entity Operation'"
level="INFO"
doc:name="Logger"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
entityId: payload.EntityId,
attributes: {
creditlimit: payload.CreditLimit,
name: payload.AccountName
}
}]]>
</ee:set-payload>
</ee:message>
</ee:transform>
<dynamics:update
config-ref="Dynamics_365_config"
logicalName="account"
doc:name="Microsoft Dynamics 365">
<dynamics:attributes>#[payload]</dynamics:attributes>
</dynamics:update>
<logger
message="'Update Entity Operation' has ended with success"
level="INFO"
doc:name="Logger"/>
<ee:transform doc:name="Response to JSON" >
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload]]>
</ee:set-payload>
</ee:message>
</ee:transform>
</flow>