Цитата:
Сообщение от
RumataEstor
Уверен, что ReportingServices типа Microsoft.Dynamics.ReportingServices.ReportingService2005? Уж с методами все должно быть нормально, ведь ListChildren нормально отрабатывает.
Тип правильный. Во первых в определении явно указываю
X++:
Microsoft.Dynamics.ReportingServices.ReportingService2005 ReportingServices = new Microsoft.Dynamics.ReportingServices.ReportingService2005();
Во вторых специально ввел для проверки в месте вызова
X++:
info (ReportingServices.ToString());
возвращает
Microsoft.Dynamics.ReportingServices.ReportingService2005
так что ошибка непонятно где( Может у кого есть возможность в 2009 посмотреть код, там вроде описание необходимых параметров есть, возможно и ошибки более детальные выдаются...
Вот результирующий код
X++:
static void RSGetReportParameter2(Args _args)
{
Microsoft.Dynamics.ReportingServices.ReportingService2005 ReportingServices = new Microsoft.Dynamics.ReportingServices.ReportingService2005();
Microsoft.Dynamics.ReportingServices.CatalogItem catalogItem;
Microsoft.Dynamics.ReportingServices.ItemTypeEnum itemTypeEnum;
Microsoft.Dynamics.ReportingServices.ReportParameter reportParameter;
SRSItemTypeEnum ItemType;
System.Net.ICredentials cred = CLRInterop::staticInvoke("System.Net.CredentialCache", "get_DefaultCredentials");
System.Exception exception;
System.Array ar, ar2, arEmpty;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.Uri url = new System.Uri('http://ax-dev/ReportServer');
str name,
path;
int i, j, arLength, arLength2, typeElement;
str type;
anytype getFieldValue(CLRObject _object, str _fieldName)
{
System.Type t;
System.Reflection.FieldInfo fieldInfo;
;
t = _object.GetType();
fieldInfo = t.GetField(_fieldName);
return fieldInfo.GetValue(_object);
}
;
try
{
ReportingServices.set_WebServiceUrl('http://ax-dev/ReportServer/ReportService2005.asmx');
ReportingServices.set_Credentials(cred);
ar = ReportingServices.ListChildren('/',true);
arLength = ar.get_Length();
for (i=0; i< arLength; i++)
{
catalogItem = ar.GetValue(i);
path = getFieldValue(catalogItem,"Path");
name = getFieldValue(catalogItem,"Name");
typeElement = getFieldValue(catalogItem,"Type");
ItemType = typeElement;
info (strfmt('%1 - %2 (%3)',ItemType, path, name));
ar2 = ReportingServices.GetReportParameters(path, null, false, null, null);
arLength2 = ar2.get_Length();
for (j = 0; j < arLength2; j++)
{
reportParameter = ar2.GetValue(j);
name = getFieldValue(reportParameter,"Name");
info(strFmt('--Параметр %1',name));
}
}
}
catch (Exception::CLRError)
{
info('Ошибка .NET');
exception = CLRInterop::getLastException();
name = exception.ToString();
info (name);
}
info('Конец');
}