1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| procedure FillSubItemFromObjectAndParam(AViewItem: TListItem; AObjectRef: THOImportRef; const AParam: TParamStructInfo);
var
LPropInfo: System.TypInfo.PPropInfo;
LIntValue: Integer;
LFloatValue: Extended;
LDateTimeValue: TDateTime;
begin
LPropInfo := TSliteRTTI.GetPropertyInfo(AObjectRef.ClassType(), AParam.Name);
if Assigned(LPropInfo) then
begin
case LPropInfo^.PropType^.Kind of
System.TypInfo.tkInteger :
if AParam.DataType = ftInteger then
begin
LIntValue := System.TypInfo.GetOrdProp(AObjectRef, AParam.Name);
AViewItem.SetSubItemByParamName(AParam.Name, IfThen(LIntValue <> DB_NUMBERNULL, IntToStr(LIntValue), ''));
end
else
raise EDBHOFieldException.CreateFmt(rsFieldName_PublishedWithUnsupportedType, [AParam.Name], Self);
System.TypInfo.tkEnumeration :
if (AParam.DataType = ftInteger) and (System.TypInfo.GetTypeData(LPropInfo^.PropType^)^.BaseType^ = TypeInfo(Boolean)) then
AViewItem.SetSubItemByParamName(AParam.Name, BooleanToStr(LongBool( System.TypInfo.GetOrdProp(AObjectRef, AParam.Name))))
else
raise EDBHOFieldException.CreateFmt(rsFieldName_PublishedWithUnsupportedType, [AParam.Name], Self);
System.TypInfo.tkFloat :
if AParam.DataType = ftFloat then
begin
LFloatValue := System.TypInfo.GetFloatProp(AObjectRef, AParam.Name);
AViewItem.SetSubItemByParamName(AParam.Name, IfThen(LFloatValue <> DB_NUMBERNULL, FloatToStr(LFloatValue), ''));
end
else if AParam.DataType = ftDate then
begin
LDateTimeValue := System.TypInfo.GetFloatProp(AObjectRef, AParam.Name);
AViewItem.SetSubItemByParamName(AParam.Name, IfThen(LDateTimeValue <> DB_DATENULL, DateToStr(LDateTimeValue), ''));
end
else if AParam.DataType = ftDateTime then
begin
LDateTimeValue := System.TypInfo.GetFloatProp(AObjectRef, AParam.Name);
AViewItem.SetSubItemByParamName(AParam.Name, IfThen(LDateTimeValue <> DB_DATENULL, DateTimeToStr(LDateTimeValue), ''));
end
else
raise EDBHOFieldException.CreateFmt(rsFieldName_PublishedWithUnsupportedType, [AParam.Name], Self);
System.TypInfo.tkUString :
if AParam.DataType = ftString then
AViewItem.SetSubItemByParamName(AParam.Name, System.TypInfo.GetStrProp(AObjectRef, AParam.Name))
else
raise EDBHOFieldException.CreateFmt(rsFieldName_PublishedWithUnsupportedType, [AParam.Name], Self);
else
raise EDBHOFieldException.CreateFmt(rsFieldName_PublishedWithUnsupportedType, [AParam.Name], Self);
end;
end
else
raise EDBHOFieldException.CreateFmt(rsFieldName_NotPublished, [AParam.Name], Self);
end; |
Partager