サポートされているウェブサービス
SOAP
スニペット言語は、プロキシを生成するプロセスを通じて、SOAPベースのウェブサービスをサポートします。Studioを使用して、.NET DLLとしてCXoneファイルシステムに保存されるプロキシを生成する必要があります。すべてのウェブサービスプロキシは、それを使用する事業単位のルートフォルダに保存する必要があります。システム管理者が事業単位3の下に共有で使用するプロキシを作成することは可能ですが、これはまだ本番環境では行われていません。
SOAPベースのウェブサービスは、RESTfulウェブサービスの登場に伴い減少しています。SOAPウェブサービスのプロキシ生成プロセスは、いつか廃止される可能性があります。近い将来、新しい機能拡張は予定されていません。
プロキシ生成プロセス内で、特定の機能がプロキシオブジェクトに追加され、CXoneで適切に機能します。そのような追加機能の1つは、バイナリストリームにシリアル化する機能です。VCの冗長性とスクリプトマーシャリング機能が機能するためには、プロキシを含むすべてのタイプがシリアル化できる必要があります。したがって、Studioプロキシ生成プロセスが必要です。
シリアル化機能に加えて、ウェブサービスの呼び出しが完了するのを待つ間、VC実行エンジンがスレッドプールを適切に利用するようにプロキシも構成されます。この機能がないと、VCスレッドプールが正しく使用されず、その結果、顧客に悪影響が及ぶ可能性があります。 適切なスレッドプールを使用することが重要です。
Studioプロセスによって追加される最後の機能は、Webサービスの使用状況を追跡する機能です。外部ウェブサービス呼び出しを行うためにプロキシが呼び出されると、使用状況と影響を記録するためにカウンターとタイムトラッカーが利用されます。これらの測定基準は、1日数回、管理用にデータベース表に保存されます。
用途
スニペット内で、USESコマンドを使用すると、スニペット内で使用するWebサービスプロキシDLLをスニペットに含めることができます。DLLファイルは、ファイルサーバー上の現在の事業単位のルートフォルダー、または事業単位3のルートフォルダー(共有使用の場合)のいずれかに配置する必要があります。構文:
USES "<proxy>.dll"
例:
USES "sf.dll" cStart="{now}" sforce=new SforceService() session=new SessionHeader() loginResult=sforce.login("demo@ucn.net",password6") sforce.sessionheadervalue=session session.sessionid=loginResult.sessionid sforce.url=loginresult.serverUrl t=new Task() t.ActivityDate=#"8/20/2050" t.Description="Call placed by {first }{Last}." t.Subject="Call @{cStart}" t.Status="Completed" t.CallType="Outbound" t.OwnerId=SF_Agent_ID t.ReminderDateTime="{cStart}" SWITCH Type { CASE "CON" { t.WhoId=SF_Obj_ID } CASE "LEA" { t.WhoId=SF_Obj_ID } CASE "ACC" { t.WhatId=SF_Obj_ID } CASE "OPP" { t.WhatId=SF_Obj_ID } CASE "CAS" { t.WhatId=SF_Obj_ID } } SaveResult=sforce.create(t)
注:ウェブサービスプロキシDLLを(Studioテスト以外の)プラットフォームで使用するには、その前にDLLを承認する必要があります。今日の承認プロセスでは、DLL名をCORサーバー(VCが実行されている場所)にある承認テキストファイルに追加します。ウェブ管理の概要ページを使用して、AuthorizedAssemblies構成設定を確認し、場所を確認します。エントリの形式はBUS<busno>\<proxy>.dllです。例:BUS4\LCWS.dll個別のDLLはそれぞれ新しい行に置く必要があります。DLLがスクリプト内で使用された後に更新された場合、更新されたDLLを使用する唯一の方法は、VCを再起動することです。
RESTful
スニペット言語は、いくつかの組み込みサービスを通じてRESTfulウェブサービスと連携します。1つ目はRestProxyサービスで、この方法で新しいインスタンスを作成して使用できます。
proxy = GetRESTProxy()
RestProxyは、リモートウェブサーバーと対話するためのいくつかのプロパティとメソッドを提供します。リクエストを作成するための主要なメソッドはMakeRestRequestと呼ばれます。すべてのプロパティとメソッドの完全な説明を以下に示します。RESTfulウェブサービスと情報を交換する場合、RestProxyはDynamicDataタイプと呼ばれる動的構造化データ定義形式をサポートします。DynamicDataタイプは、XMLおよびJSON形式のデータを受け取り、データを読み取るためのオブジェクト指向のアクセスパターンを提供できます。また、XMLまたはJSONのいずれかに変換できるオブジェクトを動的に生成することもできます。
新しいDynamicDataオブジェクトを作成するには、DYNAMICコマンドを使用します。
DYNAMIC <name> [FROM'<string>' | <var>]
<name>は新しいスクリプト変数の名前であり、inControlスクリプト仕様と互換性がある必要があります(アンダースコア「_」を除いて、先頭の数字や特殊文字は使用せず、オプションでドル記号「$」で終了します)。オプションのFROM句を使用する場合、テキストは明示的なJSONまたはXML文字列(一重引用符で囲む)またはJSONまたはXMLを含むスクリプト変数の名前にすることができます。初期化は、テストのみを簡略化するために提供されており、動的変数を初期化する一般的な手段として提供されていません。1行のテキストのみが許可されます。一重引用符を閉じる前に改行が検出されると、エラーが発生します。
メンバーとサブメンバー
この言語内の動的変数は、さまざまな便利な機能を備えた特別に設計されたエンティティです。表面的には、動的に作成されたメンバーを持つことができるオブジェクトです。たとえば、スニペットでは、動的変数を宣言して、いくつかのメンバーを作成できます。
DYNAMIC employee employee.Name = "John Smith" employee.Phone = "8005551212" employee.Address = "1234 Clay Street
各メンバーがアドレス指定されると、自動的に作成されます。したがって、名前、 電話 、および住所メンバーは、従業員変数のプロパティとして機能するようになります。
動的変数メンバーでは大文字と小文字が区別されます。したがって、employee.Nameは、employee.nameと同じではありません。これは、CXoneプラットフォームの通常の動作とは異なります。ただし、外部システムと相互運用する必要があるため(ほとんどは正しいケースに依存します)、この決定は行われ、動的変数にのみ適用されます。
サブメンバーもオンザフライで作成できます。
employee.Department.Code = 942 employee.Department.Location = "Olive City"
この場合も、サブメンバーがアドレス指定されると、それらは自動的に構造に追加されます。単一の式を使用して、構造への参照を別の動的スクリプト変数に割り当てることができます。
John = employee
認識すべき重要な点は、従業員と「ジョン」が同じ物理データを参照することです。1つのメンバーを変更すると、両方が変更されます。データをコピーするには、組み込み関数copyを使用します。以下のスニペット例はこれを示しています:
DYNAMIC x x.Name = "John" y = x y.Name = "Sam"
その結果を以下に示します:
copy関数を使用すると、yは一意のコピーを取得し、xに影響を与えることなくそれを変更できます。
DYNAMIC x x.Name = "John" y = copy(x) y.Name = "Sam"
子メンバーをコピーすることもできます:
DYNAMIC x x.Name.First = "John" x.Name.Last = "Smith" y = copy(x.Name) y.First = "Sam"
コピー機能について:オブジェクトをテキスト表現に変換してからオブジェクトに戻すことにより、ディープコピーを実行します。これは、単純に参照をコピーするよりも、プラットフォームのリソースにコストがかかります。オブジェクトが非常に大きいと、オーバーヘッドが大きくなり、スクリプトの実行が遅くなる可能性があります。必要なときに使用しますが、乱用しないようにしてください。
動的変数は配列も処理できます。オブジェクト自体を最上位の配列として扱うことも、メンバーを配列として扱うこともできます。
DYNAMIC employees employees[1] = john or employees.Person[1] = john
重要!! すべての配列はインデックス1から始まります。まだ存在しない配列インデックスを参照すると、それが作成されます。新しく参照されたインデックスの下の要素が存在しない場合は、それらも作成されます。したがって、誤ってインデックス100を指定すると、インデックス1〜99の空の要素が作成されるので注意してください。配列の要素数を取得するには、count()関数を使用します:x = count(employees.Person)
Studioのスニペットプロパティエディタのインスペクタタブは次のとおりです。これは、最上位の配列を持つ動的変数を示しています。
要素をNameという子メンバーに移動すると、次のようになります。
最上位の配列である動的変数は、動的変数の配列である通常のスクリプト変数とは異なります。次の例はこれを示しています:
DYNAMIC a DYNAMIC b DYNAMIC c a.Name = "John" b.Name = "Sam" c.Name = "Arnold" x[1] = a x[2] = b x[3] = c DYNAMIC y y[1] = a y[2] = b y[3] = c
調べる2つの変数はxとyです。最初のxは、動的変数の配列を含む通常のスクリプト変数です。2番目のyは、最上位の配列である動的変数です。インスペクターでは、どちらも似ています。
見た目は似ていますが、同じではありません。次のセクションでは、動的変数のシリアル化の概念について説明します。重要な点は、上の例では、XをYと同じようにリモートシステムと相互運用するために使用できないことです。Xはシリアライズ可能ではなく、Yはシリアライズ可能です。
シリアル化
シリアライゼーションについて説明する前に、通常のスクリプト変数と比較して、動的変数を操作する方法を示すと役立ちます。通常の変数には、文字列の解析、日付への変換、並べ替えなどを可能にする組み込みメソッドの長いリストがあります。次のドロップダウンをクリックして、動的変数を操作する方法の多くの例を表示します。

構文:
<variable>.method(<parameters>) Examples: name = " sam " g = name.length() h = name.trim() i = name.mid(2,3) j = name.contains("sam") k = name.indexof("sam")
動的変数を使用する場合、メンバーを参照するだけで、そのメンバーが存在しない場合は自動的に作成されます。Yが動的変数の場合、式y.lengthは「length」という名前のメンバーを参照し、それが自動的に作成されるため(まだ存在しないため)、lengthメソッドを使用できなくなります。これを管理するために、$valueと呼ばれる特別な動的変数メンバーが使用されます。$valueメンバーは新しい動的メンバーを作成しません。代わりに、$valueが使用されているメンバーのリテラル文字列値を返します。$valueから、次に示すように、通常のメソッドセットを使用できます:
DYNAMIC name name.First = "sam " g = name.First.$value.length() h = name.First.$value.trim() i = name.First.$value.mid(2,3) j = name.First.$value.contains("sam") k = name.First.$value.indexof("sam")
単純な値のみを含む動的変数は使用できないことに注意してください(name =“ サム“は、nameを通常のスクリプト変数に変換します)。また、$valueメンバーを割り当てることはできません。これは、動的変数の読み取り専用プロパティです。name.$value = “サム”を割り当てようとすると、エラーが発生します。$valueメンバーは、別の重要な目的にも役立ちます。$valueを使用せずに動的変数メンバーを通常のスクリプト変数にコピーする場合は、新しい動的変数を作成するだけです。
DYNAMIC name name.First = "Sam" x = name.First
Firstは動的変数のメンバーであるため、xは自動的に動的変数になります(これは、xを追加のメンバーで拡張することを計画している場合、またはより一般的には、割り当て元のメンバーが独自のサブメンバーを持っている場合に役立ちます。 )。次の例は、この問題を示しています:
c = x.indexof("a") // Fails to compile! c = x.$value.indexof("a") // works
ただし、name.First.$valueが代わりに使用される場合、新しい変数は通常になります。
DYNAMIC name name.First = "Sam" x = name.First.$value c = x.indexof("a") // Works! c = x.$value.indexof("a") // Fails to compile
動的変数を使用する利点の1つは、シリアル化の威力です。これは、オブジェクトをウェブ経由での送信に適したテキスト形式に変換する機能です。現在、XMLとJSONの2つの形式がサポートされています。RestProxy(このセクションで前述)を使用している場合、シリアル化プロセスは自動的に行われます。シリアル化された文字列を手動で生成する必要がある場合は、2つの文字列メソッドが提供されます。
<var>.asjson() <var>.asxml()
文字列コンテキスト内で使用して、オブジェクトのシリアル化されたバージョンを生成します。
text = "{y.asjson()}"
以下は、yの値が前の例に似ていると仮定してテキストに含まれる内容です。
{"Name":[{"First":"Sam","Last":"Smith"},{"First":"Bill","Last":"Smith"}]}
同様に、.asxmlメソッドは次のような出力を生成します:
<?xml version="1.0" encoding="utf-16" standalone="yes"?> <DynamicDataObject><Name><First>Sam</First<Last>Smith</Last></Name> <Name><First>Bill</First><Last>Smith</Last></Name></DynamicDataObject>
RestProxyメンバー
GetRestProxy()を呼び出して取得したRestProxyは、RESTfulウェブサービス規則を使用してリモートウェブサーバーと通信するためのサービスを提供します。Studio Snippet Editorを使用すると、入力中に使用可能なプロパティとメソッドを表示できます。新しいプロキシインスタンスを宣言するだけです。
proxy = GetRESTProxy()
次に、新しい行にproxyと入力し、その後にピリオド(.)を入力します。
Intelli-Promptシステムは、利用可能なメンバーを含むリストボックスを自動的に表示します。メソッドを選択したら、左括弧を入力すると、Intelli-Promptシステムが再びアクティブになり、パラメーターが表示されます。
プロパティ
プロパティ | 詳細 |
---|---|
ステータスコード | MakeRestRequest()の呼び出しに続くHTTPステータスコードが含まれます。 |
ステータス説明 | MakeRestRequest()の呼び出しに続くHTTPステータスの説明が含まれます。 |
ContentType | デフォルトのcontent-typeヘッダーのオーバーライドを許可します。デフォルトは「Form-urlencoded」です。JSONを送信する場合は、たとえば「application/json」に変更する必要があります。 |
ProxyTimeoutSeconds | デフォルトのリクエストタイムアウトを変更できます。デフォルトは10秒です。 |
方法
方法 | 詳細 |
---|---|
文字列urlencode(文字列値) | |
説明 | 文字列をURLエンコード形式にエンコードするヘルパーメソッド。 |
MakeRestRequest | 指定されたURLに対してHTTPリクエストを実行します。 |
ClearHeaders | AddHeaderで追加されたカスタムヘッダーをすべてクリアします。 |
AddHeader | HTTPリクエストにカスタムヘッダーを追加します。 |
MakeTwitterOauthRequest | Twitterと通信するための特別なリクエストを作成します。 |
GetSalesForceOAuthToken | SalesForce.comに必要な特別な認証トークンを生成します。 |