Delphi ActiveX
Delphi ActiveX
effectconnect Create or Replace Product Catalog
See more effectconnect Examples
Use this call to create or replace a product catalog in EffectConnect. This is always a purge and replace action for the entire catalog.Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
uri: WideString;
apiVersion: WideString;
http: TChilkatHttp;
req: TChilkatHttpRequest;
dt: TCkDateTime;
timestamp: WideString;
sbXml: TChilkatStringBuilder;
sbStringToSign: TChilkatStringBuilder;
crypt: TChilkatCrypt2;
resp: TChilkatHttpResponse;
xmlResp: TChilkatXml;
tagPath: WideString;
RequestType: WideString;
RequestAction: WideString;
RequestVersion: WideString;
ProcessedAt: WideString;
Result: WideString;
ProcessID: WideString;
begin
success := 0;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
uri := '/products';
apiVersion := '2.0';
http := TChilkatHttp.Create(Self);
req := TChilkatHttpRequest.Create(Self);
// Use your effectconnect public key here...
req.AddHeader('KEY','PUBLIC_KEY');
req.AddHeader('VERSION',apiVersion);
req.AddHeader('URI',uri);
req.AddHeader('RESPONSETYPE','XML');
req.AddHeader('RESPONSELANGUAGE','en');
// Get the current date/time in timestamp format.
dt := TCkDateTime.Create(Self);
dt.SetFromCurrentSystemTime();
timestamp := dt.GetAsTimestamp(1);
req.AddHeader('TIME',timestamp);
Memo1.Lines.Add('timestamp = ' + timestamp);
sbXml := TChilkatStringBuilder.Create(Self);
success := sbXml.LoadFile('qa_data/xml/effectconnect/effconCreate.xml','utf-8');
Memo1.Lines.Add('length = ' + IntToStr(sbXml.Length));
req.HttpVerb := 'POST';
req.Path := uri;
req.ContentType := 'multipart/form-data';
success := req.AddStringForUpload('payload','effcon.xml',sbXml.GetAsString(),'utf-8');
if (success = 0) then
begin
Memo1.Lines.Add(req.LastErrorText);
Exit;
end;
// Build a string-to-sign and sign it using our effectconnect private key
sbStringToSign := TChilkatStringBuilder.Create(Self);
sbStringToSign.AppendInt(sbXml.Length);
sbStringToSign.Append('POST');
sbStringToSign.Append(uri);
sbStringToSign.Append(apiVersion);
sbStringToSign.Append(timestamp);
crypt := TChilkatCrypt2.Create(Self);
crypt.MacAlgorithm := 'hmac';
crypt.HashAlgorithm := 'sha512';
crypt.EncodingMode := 'base64';
// Use your effectconnect private key here:
crypt.SetMacKeyString('PRIVATE_KEY');
req.AddHeader('SIGNATURE',crypt.MacStringENC(sbStringToSign.GetAsString()));
resp := TChilkatHttpResponse.Create(Self);
success := http.HttpSReq('submit.effectconnect.com',443,1,req.ControlInterface,resp.ControlInterface);
if (success = 0) then
begin
Memo1.Lines.Add(http.LastErrorText);
Exit;
end;
Memo1.Lines.Add('response status code = ' + IntToStr(resp.StatusCode));
// Examine the response. The response status code can be 200 for both errors and success.
// The success or error is based on the XML returned in the response body.
xmlResp := TChilkatXml.Create(Self);
xmlResp.LoadXml(resp.BodyStr);
Memo1.Lines.Add('response body:');
Memo1.Lines.Add(xmlResp.GetXml());
// A sample response:
// <?xml version="1.0" encoding="utf-8"?>
// <ApiResponseContainer>
// <Request>
// <RequestType>Products</RequestType>
// <RequestAction>Create</RequestAction>
// <RequestVersion>2.0</RequestVersion>
// <RequestIdentifier/>
// <ProcessedAt>2019-04-18T15:28:55+02:00</ProcessedAt>
// </Request>
// <Response>
// <Result>Success</Result>
// <ProductsCreateResponseContainer>
// <ProcessID><![CDATA[J048hgS4OkNn0JnH]]></ProcessID>
// </ProductsCreateResponseContainer>
// </Response>
// </ApiResponseContainer>
// Parsing the response...
RequestType := xmlResp.GetChildContent('Request|RequestType');
RequestAction := xmlResp.GetChildContent('Request|RequestAction');
RequestVersion := xmlResp.GetChildContent('Request|RequestVersion');
ProcessedAt := xmlResp.GetChildContent('Request|ProcessedAt');
Result := xmlResp.GetChildContent('Response|Result');
ProcessID := xmlResp.GetChildContent('Response|ProductsCreateResponseContainer|ProcessID');
end;