Лоцман PLM

Автор zazakey, 11.06.13, 15:55:47

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

zazakey

Здравствуйте.

Недавно столкнулся с такой проблемой, писал плагин на Delphi 7 для Лоцман PLM и нужно было вывести свойство _LIST необходимого атрибута.

var
   DataSet: IDataSet;
   text: string;
   PluginCall: IPluginCall;
begin
    DataSet := PluginCall.GetDataSet('GetInfoAboutAttribute',VarArrayOf(['Атрибут',1]));
    text := DataSet.FieldValue['_list'];
    ShowMessage(text);
end;
Вместо значения он выводит вопросительные знаки. Если кто то сталкивался с таким или знает как это исправить, подскажите пожалуйста!

Chaa

Для начала попробуйте так:
var
   DataSet: IDataSet;
   text: WideString;
   PluginCall: IPluginCall;
begin
    DataSet := PluginCall.GetDataSet('GetInfoAboutAttribute',VarArrayOf(['Атрибут',1]));
    text := DataSet.FieldValue['_list'];
    MessageBoxW(0, PWideChar(text), '', MB_OK);
end;

В результате будет видно, где портится строка - в вашем плагине или она уже такая в него поступает.
+ Благодарностей: 1

zazakey

Выводит китайские символы вместо русских((

Chaa

А в стандартном клиенте списки значений правильно отображаются?
Попробуйте получить список значений другой функцией:
var
   DataSet: IDataSet;
   text: WideString;
   PluginCall: IPluginCall;
begin
    DataSet := PluginCall.GetDataSet('GetAttributeList2', VarArrayOf([0]));
    DataSet.Locate('_NAME', 'Атрибут', False, False);
    text := DataSet.FieldValue['_LIST'];
    MessageBoxW(0, PWideChar(text), '', MB_OK);
end;

zazakey

Все равно возвращает иероглифы ((

Lito 2

Может кому-то пригодится.
Я пытался получить представление из текстового атрибута. При стандартном преобразовании текст возвращался в виде иероглифов.
Точно также как это описано выше.
При рассмотрении того что возвращалось, оказался, что это Array byte и с ним необходимо работать как с массивом, а не как со строчкой.

Вот рабочий код при получении представления из текстового атрибута.


//------------------------------------------------------------------------------
//Преобразование
function OleVariantToString(const Value: OleVariant): string;
   var ss: TStringStream;
       Size: integer;
       Data: PByteArray;
begin
   Result:='';
   if Length(Value) = 0 then Exit;
   ss:=TStringStream.Create;
   try
     Size := VarArrayHighBound (Value, 1) - VarArrayLowBound(Value, 1) + 1;
     Data := VarArrayLock(Value);
     try
       ss.Position := 0;
       ss.WriteBuffer(Data^, Size);
       ss.Position := 0;
       Result:=ss.DataString;
     finally
       VarArrayUnlock(Value);
     end;
   finally
     ss.Free;
   end;
end;

//
var  varAttrS: Variant;
       LDataSet2: IDataSet;
       IstrIzm: oleVariant;

.....

              varAttrS:= VarArrayCreate([0, 2], varVariant);
              varAttrS[0]:=  FPluginCall.IdVersion;
              varAttrS[1]:= 'Доп. описание';
              varAttrS[2]:= 0;

              LDataSet2:= FPluginCall.GetDataSet('GetAttrPlainTextValue', varAttrS);
              IstrIzm:= LDataSet2.FieldValue['_TEXT'];
              Application.MessageBox(PWideChar(OleVariantToString(IstrIzm)), 'Текст атрибута', MB_OK + MB_ICONWARNING);