Thanks Lukas.
2011/9/16 Lukas Zeller <[email protected]>
> Hello Roger,
>
> On Sep 16, 2011, at 16:28 , Roger KeIrad wrote:
>
> > hello,
> > any help please?
> > thanks in advance.
>
>
> There are a number of GetValueXXX variants. GetValue() is only for single
> values.
>
> For arrays, you need to use GetValueByID(), which has a arrIndex parameter.
> To get the ID for a name, use GetValueID(). You can get the size of the
> array by appending VALSUFF_ARRSZ to the array field name, and call
> GetValue() with that - you'll get the number of elements back.
>
> See sysync_SDK/Sources/enginemodulebase.h for more detailed description of
> all the Get/SetValue functions, and engine_defs.h for the VALNAME_xxx and
> VALSUFF_xxx explanations.
>
> Pseudo code to get all elements of an array would look like:
> SDK_InterfaceType
> // get size of array
> uInt16 arraySize;
> memsize n;
> GetValue("arrayFieldName" VALSUFF_ARRSZ, VALTYPE_INT16,
> &arraySize,sizeof(arraySize),n);
>
> // get elements of array
> long arrayFieldID = GetValueID("arrayFieldName");
> for (int i=0; i<arraySize; i++) {
> GetValueByID(arrayFieldID, i, VALTYPE_XXX, &buffer, maxSize, n);
> // do something with the value
> }
>
>
>
> Below is a more elaborate routine, which prints out all values for a given
> aItemKey, including array fields:
>
>
> /* Show all fields/variables of item represented by aItemKey */
> static void ShowFields(DB_Callback cb, appPointer aItemKey)
> {
> const stringSize maxstr = 128;
> appChar fnam[maxstr];
> appChar fval[maxstr];
> appChar ftz[maxstr];
> uInt16 fvaltype;
> uInt16 farrsize;
> uInt16 arridx;
> bool fisarray;
> uInt32 valsize;
> TSyError err;
> uInt32 valueID,nameFlag,typeFlag,arrszFlag,tznamFlag;
> // set desired time mode
> cb->ui.SetTimeMode(cb, aItemKey, TMODE_LINEARTIME+TMODE_FLAG_FLOATING);
> // get flags that can be combined with valueID to get attributes of a
> value
> nameFlag = cb->ui.GetValueID(cb, aItemKey, ".FLAG.VALNAME");
> typeFlag = cb->ui.GetValueID(cb, aItemKey, ".FLAG.VALTYPE");
> arrszFlag = cb->ui.GetValueID(cb, aItemKey, ".FLAG.ARRAYSIZE");
> tznamFlag = cb->ui.GetValueID(cb, aItemKey, ".FLAG.TZNAME");
> // iterate over all fields
> // - start iteration
> valueID = cb->ui.GetValueID(cb, aItemKey, VALNAME_FIRST);
> while (valueID != KEYVAL_ID_UNKNOWN && valueID != KEYVAL_NO_ID) {
> // get field name
> err = cb->ui.GetValueByID(cb,
> aItemKey,
> valueID + nameFlag,
> 0,
> VALTYPE_TEXT,
> fnam,
> maxstr,
> &valsize
> );
> // get field type
> err = cb->ui.GetValueByID(cb,
> aItemKey,
> valueID + typeFlag,
> 0,
> VALTYPE_INT16,
> &fvaltype,
> sizeof(fvaltype),
> &valsize
> );
> // check if array, and if array, get number of elements
> err = cb->ui.GetValueByID(cb,
> aItemKey,
> valueID + arrszFlag,
> 0,
> VALTYPE_INT16,
> &farrsize,
> sizeof(farrsize),
> &valsize
> );
> fisarray = err==LOCERR_OK;
>
> if (!fisarray) {
> // single value
> err = cb->ui.GetValueByID(cb, aItemKey, valueID, 0, VALTYPE_TEXT,
> fval, maxstr, &valsize);
> if (err==LOCERR_OK) {
> if (fvaltype==VALTYPE_TIME64) {
> // for timestamps, get time zone name as well
> cb->ui.GetValueByID(cb, aItemKey, valueID+tznamFlag, 0,
> VALTYPE_TEXT, ftz, maxstr, &valsize);
> DEBUG_(cb, "- %-20s (VALTYPE=%2hd) = %s
> timezone=%s",fnam,fvaltype,fval,ftz);
> }
> else
> DEBUG_(cb, "- %-20s (VALTYPE=%2hd) = '%s'",fnam,fvaltype,fval);
> }
> else
> DEBUG_(cb, "- %-20s (VALTYPE=%2hd) : No value,
> error=%hd",fnam,fvaltype,err);
> }
> else {
> // array
> DEBUG_(cb, "- %-20s (VALTYPE=%2d) = Array with %d
> elements",fnam,fvaltype,farrsize);
> // show elements
> for (arridx=0; arridx<farrsize; arridx++) {
> err = cb->ui.GetValueByID(cb, aItemKey, valueID, arridx,
> VALTYPE_TEXT, fval, maxstr, &valsize);
> if (err==LOCERR_OK) {
> if (fvaltype==VALTYPE_TIME64) {
> // for timestamps, get time zone name as well
> cb->ui.GetValueByID(cb, aItemKey, valueID+tznamFlag, arridx,
> VALTYPE_TEXT, ftz, maxstr, &valsize);
> DEBUG_(cb, " %20s[%3hd] = %s
> timezone=%s",fnam,arridx,fval,ftz);
> }
> else
> DEBUG_(cb, " %20s[%3hd] = '%s'",fnam,arridx,fval);
> }
> else
> DEBUG_(cb, " %20s[%3hd] : No value,
> error=%hd",fnam,arridx,err);
> }
> }
> // next value
> valueID = cb->ui.GetValueID(cb, aItemKey, VALNAME_NEXT);
> } // while more values
> } /* ShowFields */
>
>
_______________________________________________
os-libsynthesis mailing list
[email protected]
http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis