Adding Repository Data Consumer

Below is the example of using the SetEtl operation to add a repository data consumer to ETL task. The request contains moniker of opened ETL task instance and parameters of creating a new object: type of created object and its specific settings. The response contains information about the created object and the list of its fields that is filled based on the table structure used as a data consumer.

SOAP request:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SetEtl xmlns="http://www.fsight.ru/PP.SOM.Som">
<tEtl xmlns="">
  <id>S1!M!S!L1</id>
  </tEtl>
<tArg xmlns="">
<pattern>
  <obInst>true</obInst>
  <objects>Add</objects>
<object>
  <settings>true</settings>
<consumer>
  <props>true</props>
  </consumer>
  </object>
  </pattern>
<meta>
<objects>
<its>
<it>
  <k>0</k>
  <id>REPO_CONSUMER</id>
  <vis>true</vis>
  <type>PlainDataMetabaseConsumer</type>
<settings>
<plainConsumer>
<consumer>
<props>
  <type>Mb</type>
<mb>
<dataset>
  <i>BACKUP_DATA</i>
  <n>Table</n>
  <k>37886</k>
  <c>769</c>
  </dataset>
  </mb>
  </props>
  </consumer>
  <fillFields>FromSource</fillFields>
  </plainConsumer>
  </settings>
  </it>
  </its>
  </objects>
  </meta>
<metaGet>
  <obInst>true</obInst>
  <objects>Get</objects>
<objectsFilter>
<range>
  <start>3</start>
  <count>1</count>
  </range>
  </objectsFilter>
<object>
  <settings>true</settings>
<consumer>
  <fields>true</fields>
  </consumer>
  <fields>Get</fields>
  </object>
  </metaGet>
  </tArg>
  </SetEtl>
  </s:Body>
  </s:Envelope>

SOAP response:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<SetEtlResult xmlns="http://www.fsight.ru/PP.SOM.Som" xmlns:q1="http://www.fsight.ru/PP.SOM.Som" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id xmlns="">
  <id>S1!M!S!L1</id>
  </id>
<meta xmlns="">
<obInst>
<obDesc ds="" isShortcut="0" isLink="0" ver="3" hf="0">
  <i>ETL_INDICATOR</i>
  <n>ETL task for factor loading</n>
  <k>7012</k>
  <c>4097</c>
  <p>7011</p>
  <h>0</h>
  <hasPrv>0</hasPrv>
  <ic>0</ic>
  <isPermanent>1</isPermanent>
  <isTemp>0</isTemp>
  </obDesc>
  </obInst>
  <dirty>1</dirty>
<objects>
<its>
<it>
  <k>3</k>
  <id>REPO_CONSUMER</id>
  <n>Repository consumer1</n>
  <vis>1</vis>
  <type>PlainDataMetabaseConsumer</type>
<obDesc ds="" isShortcut="0" isLink="0" ver="0" hf="0">
  <i>BACKUP_DATA</i>
  <n>Table</n>
  <k>37886</k>
  <c>769</c>
  <p>7011</p>
  <h>0</h>
  <hasPrv>0</hasPrv>
  <ic>0</ic>
  </obDesc>
  <read>1</read>
  <write>1</write>
<settings>
<plainConsumer>
<consumer>
<fields>
<its>
<it>
  <k>1</k>
  <id>FIELD</id>
  <n>Field</n>
  <vis>1</vis>
  <dt>2</dt>
  <dd>-1</dd>
  <size>10</size>
  <precision>0</precision>
  <expression />
  <calculated>0</calculated>
  <dateFormat>DMY</dateFormat>
  </it>
<it>
  <k>2</k>
  <id>FIELD1</id>
  <n>Field1</n>
  <vis>1</vis>
  <dt>1</dt>
  <dd>0</dd>
  <size>255</size>
  <precision>0</precision>
  <expression />
  <calculated>0</calculated>
  <dateFormat>DMY</dateFormat>
  </it>
<it>
  <k>3</k>
  <id>IND_DATA</id>
  <n>ind_data</n>
  <vis>1</vis>
  <dt>4</dt>
  <dd>-1</dd>
  <size>0</size>
  <precision>0</precision>
  <expression />
  <calculated>0</calculated>
  <dateFormat>DMY</dateFormat>
  </it>
  </its>
  </fields>
  </consumer>
  <keyFieldNames />
  <clearConsumer>1</clearConsumer>
<bulk>
  <commitCount>1024</commitCount>
  <actionOnProblem>DiscardRecordsInTransaction</actionOnProblem>
  <saveInvalidRecs>0</saveInvalidRecs>
  <invalidRecsFileName />
  <useStopLimit>0</useStopLimit>
  <stopLimit>1024</stopLimit>
  <eventId />
  </bulk>
  </plainConsumer>
  </settings>
  </it>
  </its>
  </objects>
  <shapes />
  </meta>
  </SetEtlResult>
  </soapenv:Body>
  </soapenv:Envelope>

JSON request:

{
"SetEtl" :
{
"tEtl" :
{
"id" : "S1!M!S!L1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "true",
"objects" : "Add",
"object" :
{
"settings" : "true",
"consumer" :
{
"props" : "true"
}
}
},
"meta" :
{
"objects" :
{
"its" :
{
"it" :
[
{
"k" : "0",
"id" : "REPO_CONSUMER",
"vis" : "true",
"type" : "PlainDataMetabaseConsumer",
"settings" :
{
"plainConsumer" :
{
"consumer" :
{
"props" :
{
"type" : "Mb",
"mb" :
{
"dataset" :
{
"i" : "BACKUP_DATA",
"n" : "Table",
"k" : "37886",
"c" : "769"
}
}
}
},
"fillFields" : "FromSource"
}
}
}
]
}
}
},
"metaGet" :
{
"obInst" : "true",
"objects" : "Get",
"objectsFilter" :
{
"range" :
{
"start" : "3",
"count" : "1"
}
},
"object" :
{
"settings" : "true",
"consumer" :
{
"fields" : "true"
},
"fields" : "Get"
}
}
}
}
}

JSON response:

{
"SetEtlResult" :
{
"id" :
{
"id" : "S1!M!S!L1"
},
"meta" :
{
"obInst" :
{
"obDesc" :
{
"@ds" : "",
"@isShortcut" : "0",
"@isLink" : "0",
"@ver" : "3",
"@hf" : "0",
"i" : "ETL_INDICATOR",
"n" : "ETL task for loading indicators",
"k" : "7012",
"c" : "4097",
"p" : "7011",
"h" : "0",
"hasPrv" : "0",
"ic" : "0",
"isPermanent" : "1",
"isTemp" : "0"
}
},
"dirty" : "1",
"objects" :
{
"its" :
{
"it" :
[
{
"k" : "3",
"id" : "REPO_CONSUMER",
"n" : "Repository consumer1",
"vis" : "1",
"type" : "PlainDataMetabaseConsumer",
"obDesc" :
{
"@ds" : "",
"@isShortcut" : "0",
"@isLink" : "0",
"@ver" : "0",
"@hf" : "0",
"i" : "BACKUP_DATA",
"n" : "Table",
"k" : "37886",
"c" : "769",
"p" : "7011",
"h" : "0",
"hasPrv" : "0",
"ic" : "0"
},
"read" : "1",
"write" : "1",
"settings" :
{
"plainConsumer" :
{
"consumer" :
{
"fields" :
{
"its" :
{
"it" :
[
{
"k" : "1",
"id" : "FIELD",
"n" : "Field",
"vis" : "1",
"dt" : "2",
"dd" : "-1",
"size" : "10",
"precision" : "0",
"expression" : "",
"calculated" : "0",
"dateFormat" : "DMY"
},
{
"k" : "2",
"id" : "FIELD1",
"n" : "Field1",
"vis" : "1",
"dt" : "1",
"dd" : "0",
"size" : "255",
"precision" : "0",
"expression" : "",
"calculated" : "0",
"dateFormat" : "DMY"
},
{
"k" : "3",
"id" : "IND_DATA",
"n" : "ind_data",
"vis" : "1",
"dt" : "4",
"dd" : "-1",
"size" : "0",
"precision" : "0",
"expression" : "",
"calculated" : "0",
"dateFormat" : "DMY"
}
]
}
}
},
"keyFieldNames" : "",
"clearConsumer" : "1",
"bulk" :
{
"commitCount" : "1024",
"actionOnProblem" : "DiscardRecordsInTransaction",
"saveInvalidRecs" : "0",
"invalidRecsFileName" : "",
"useStopLimit" : "0",
"stopLimit" : "1024",
"eventId" : ""
}
}
}
}
]
}
},
"shapes" : ""
}
}
}
public static SetEtlResult AddConsumer(MbId mb, EtlId moniker, string consumerId)
{
var somClient = new SomPortTypeClient(); //Proxy object for operation execution
var consumerDesc = FindObjectById(mb, consumerId); // Consumer description
//Operation execution parameters
var tSet = new SetEtl()
{
tArg = new SetEtlArg()
{
pattern = new EtlMdPattern()
{
objects = ListOperation.Add,
@object = new EtlObjectPattern()
{
settings = true,
consumer = new EtlConsumerPattern()
{
props = true
}
}
},
meta = new EtlMd()
{
objects = new EtlObjects()
{
its = new EtlObject[]
{
new EtlObject()
{
//Basic properties
id = "REPO_CONSUMER",
k = 0,
type = EtlObjectType.PlainDataMetabaseConsumer,
vis = true,
//Set up consumer
settings = new EtlObjectSettings()
{
plainConsumer = new EtlPlainDataConsumer()
{
fillFields = EtlFillFieldsType.FromSource,
consumer = new DtConsumerMd()
{
props = new DtConsumerProps()
{
type = DtConsumerType.Mb,
mb = new DtConsumerMb()
{
dataset = new Ob()
{
k = consumerDesc.k,
i = consumerDesc.i,
c = consumerDesc.c,
n = consumerDesc.n
}
}
}
}
}
}
}
}
}
},
metaGet = new EtlMdPattern()
{
objects = ListOperation.Get,
objectsFilter = new ListFilter() { range = new ListRange() { start = 3, count = 1 } },
@object = new EtlObjectPattern()
{
fields = ListOperation.Get,
settings = true,
consumer = new EtlConsumerPattern() { fields = true }
}
}
},
tEtl = moniker
};
//Add object to ETL task
var result = somClient.SetEtl(tSet);
return result;
}

See also:

SetEtl: Operation