Изменение сценариев
Для внедрения новой веб-службы нужно изменить сценарии.
Нужно внедрить новую веб-службу. В следующем примере веб-служба называется ITEM_RECATEGORIZE. Эта веб-служба принимает первичный ключ и новый путь категории в качестве входных значений и возвращает состояние (успешно или неудачно). Входной XML описан в разделе Изменение кода категоризации.
В продукте предусмотрено несколько расширений на языке WSDL и поддерживающие библиотеки сценариев, так что веб-службы интеграции портала можно расширить, не изменяя исходные файлы и пакета продукта.
Инкрементная разработка сценариев
В приведенном ниже примере веб-служба wpc_integrated_dev расширена для обработки запросов повторной категоризации элемента. WSDL уже приспособлен для запросов такого типа.
<xs:complexType name="wpcCommandType">
<xs:sequence>
<xs:element name="wpcCatalogName" type="xs:string"
minOccurs="0"/>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" ITEM_RECATEGORIZE "/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="mode" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="SYNC"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
В примере эту обработку выполняет метод запроса в сценарии расширения. Возможная реализация этого метода://------------------------------------------------------
//Global variable declaration
//------------------------------------------------------
function processRequest(infoMap)
{
..................
if(sExtCmd == " ITEM_RECATEGORIZE")
{
.......................................................
//fetch the parameter etc
}
else
{
log.invoke("DEBUG", "-- ITEM_RECATEGORIZE -- function
processRequest(infoMap) didn't find sExtCmd[" + sExtCmd + "]");
}
}
Веб-служба ITEM_RECATEGORIZE должна указывать на эту функцию.Ниже ответ на эту команду:
function constructResponseForReCategorize (infoMap)
{
var XML_ RECATEGORIZE = "";
var err;
var libraryResponse = getScriptByPath("scripts/triggers/WPC-Portal-
ResponseUtil.wpcs");
var getNotificationInfoPartMethod =
libraryResponse.getFunctionByName("getNotificationInfoPart");
catchError(err)
{
...........................................................
// Retrieve the catalog
var ctg = getCtgByName(infoMap["CATALOGNAME"]);
var parentCategory = infoMap["PARENTCATEGORY"];
...........................................................
// Prepare the response xml
if(XML_RECATEGORIZE!= "")
{
result = "<wpc:wpcTradeCategory ID=\""
+ infoMap["PARENTCATEGORY"] + "\"><wpc:wpcParentCategory>"
+ infoMap["PARENTCATEGORY"]
+"</wpc:wpcParentCategory><wpc:wpcCatalogName>"
+ infoMap["CATALOGNAME"] +
"</wpc:wpcCatalogName><wpc:attribute-list>"
+ XML_RECATEGORIZE + "</wpc:attributelist></
wpc:wpcTradeCategory>";
}
}
}
function getResponse(infoMap)
{
var result = "";
//Retrieve the command
var sCmdType =
checkString(parseXMLNode("wpc:wpcBody/wpc:wpcCommand/wpc:extension/wpc
:wpcCommand@type"),"");
if (sCmdType == " ITEM_RECATEGORIZE ")
{
result = constructResponseForReCategorize (infoMap);
}
else
{
// soapFaultCode
}
}
В этом примере для записи для Portal_Config с ключом EXT_RESPONSE нужно задать getResponse.