本記事では CData サポート担当からこんなことを聞かれたらどこを確認すべきか?という観点で、よく頂くお問合せ内容をご紹介します。
記事はこちら →コラボフロー(www.collabo-style.co.jp/ )は誰でも簡単に作れるクラウドベースのワークフローサービスです。さらにCData Connect Cloud と連携することで、Dynamics CRM データへのクラウドベースのアクセスをノーコードで追加できます。本記事では、CData Connect Cloud 経由でコラボフローからDynamics CRM 連携を実現する方法を紹介します。
CData Connect Cloud はDynamics CRM データへのクラウドベースのOData インターフェースを提供し、コラボフローからDynamics CRM データへのリアルタイム連携を実現します。
コラボフローでDynamics CRM データを操作するには、Connect Cloud からDynamics CRM に接続し、コネクションにユーザーアクセスを提供してDynamics CRM データのOData エンドポイントを作成する必要があります。
Dynamics CRM に接続したら、目的のテーブルのOData エンドポイントを作成します。
必要であれば、Connect Cloud 経由でDynamics CRM に接続するユーザーを作成します。
OAuth 認証をサポートしていないサービス、アプリケーション、プラットフォーム、またはフレームワークから接続する場合は、認証に使用するパーソナルアクセストークン(PAT)を作成できます。きめ細かなアクセス管理を行うために、サービスごとに個別のPAT を作成するのがベストプラクティスです。
CData Connect Cloud では、簡単なクリック操作ベースのインターフェースでデータソースに接続できます。
Dynamics CRM では、インスタンスごとに接続文字列の設定が必要です。 Authentication セクションでは、有効なDynamics CRM のUser、Password の入力、およびDynamics CRM Server Organization root のURL を設定します。さらに、CRMVersion プロパティに、'CRM2011+' もしくは'CRMOnline' を設定します。IFD コンフィグレーションもサポートされていますので、InternetFacingDeployment をTRUE に設定してください。
また、Security Token Service(STS)、もしくはAD FS エンドポイントをSTSURL プロパティに設定することもできます。 この値はGetSTSUrl ストアドプロシージャで取得できます。 Office 365 ユーザーはデフォルトSTS URL にCRMVersion の設定だけで接続することができます。
Dynamics CRM に接続したら、目的のテーブルのOData エンドポイントを作成します。
コネクションとOData エンドポイントを設定したら、コラボフローからDynamics CRM データに接続できます。
コラボフロー上で使用するConnect Cloud との接続用JavaScriptを準備します。
(function () {
'use strict';
// Setting Propeties
const AutocompleteSetting =
{
// Autocomplete target field for Collaboflow
InputName: 'fid0',
// Collaboflow item detils line number
ListRowNumber : 15,
// Autocomplete tartget field for Connect Cloud
ApiListupFiledColumn : 'dynamicscrm_column',
// Key Column Name for Connect Cloud resource
ApiListupKeyColumn : 'dynamicscrm_keycolumn',
// Mapping between Collaboflow field and Connect Cloud column
Mappings: [
{
PartsName: 'fid1', // Collabo flow field name
APIName: 'dynamicscrm_column1' // Connect Cloud column name
},
{
PartsName: 'fid2',
APIName: 'dynamicscrm_column2'
},
{
PartsName: 'fid3',
APIName: 'dynamicscrm_column3'
},
{
PartsName: 'fid4',
APIName: 'dynamicscrm_column4'
}
]
};
const CDataConnectCloudSetting = {
// Connect Cloud URL
ConnectCloudUrl : 'http://XXXXXX',
// Connect Cloud Resource Name
ConnectCloudResourceName : 'dynamicscrm_table',
// Connect Cloud Key
Headers : { Authorization: 'Basic YOUR_BASIC_AUTHENTICATION' },
// General Properties
ParseType : 'json',
get BaseUrl() {
return CDataCloudServerSetting.ApiServerUrl + '/api.rsc/' + CDataCloudServerSetting.ApiServerResourceName
}
}
let results = [];
let records = [];
// Set autocomplete processing for target input field
collaboflow.events.on('request.input.show', function (data) {
for (let index = 1; index < AutocompleteSetting.ListRowNumber; index++) {
$('#' + AutocompleteSetting.InputName + '_' + index).autocomplete({
source: AutocompleteDelegete,
autoFocus: true,
delay: 500,
minLength: 2
});
}
});
// This function get details from Connect Cloud, Then set values at each input fields based on mappings object.
collaboflow.events.on('request.input.' + AutocompleteSetting.InputName + '.change', function (eventData) {
debugger;
let tartgetParts = eventData.parts.tbl_1.value[eventData.row_index - 1];
let keyId = tartgetParts[AutocompleteSetting.InputName].value.split(':')[1\;
let record = records.find(x => x[AutocompleteSetting.ApiListupKeyColumn] == keyId);
if (!record)
return;
AutocompleteSetting.Mappings.forEach(x => tartgetParts[x.PartsName].value = '');
AutocompleteSetting.Mappings.forEach(x => tartgetParts[x.PartsName].value = record[x.APIName]);
});
function AutocompleteDelegete(req, res) {
let topParam = '&$top=10'
let queryParam = '$filter=contains(' + AutocompleteSetting.ApiListupFiledColumn + ',\'' + encodeURIComponent(req.term) + '\')';
collaboflow.proxy.get(
CDataCloudServerSetting.BaseUrl + '?' +
queryParam +
topParam,
CDataCloudServerSetting.Headers,
CDataCloudServerSetting.ParseType).then(function (response) {
results = [];
records = [];
if (response.body.value.length == 0) {
results.push('No Results')
res(results);
return;
}
records = response.body.value;
records.forEach(x => results.push(x[AutocompleteSetting.ApiListupFiledColumn] + ':' + x[AutocompleteSetting.ApiListupKeyColumn]));
res(results);
}).catch(function (error) {
alert(error);
});
}
})();
JavaScript を作成したら、後はコラボフローにアップするだけです。
コラボフローからDynamics CRM ライブデータに直接接続できるようになりました。これで、Dynamics CRM データを複製せずにより多くの接続とアプリを作成できます。
クラウドアプリケーションから直接100を超えるSaaS 、ビッグデータ、NoSQL ソースへのリアルタイムデータアクセスを取得するには、CData Connect Cloud を参照してください。