У меня есть проект, который предоставляет объектную модель для использования различными типами клиентов. Написанный в .Net 3.5 он предоставляет классы для COM. Проблема в том, что, кажется, все работает с тестового клиента VB6, я столкнулся со странными ошибками при попытке автоматизировать его с помощью JScript и Windows Script Host.
Вот фрагмент кода:
var scComponent = new ActiveXObject("Mine.SCComponent");
var Prescription = new ActiveXObject ("Mine.CardHolderNewServedPrescriptionData");
Prescription.DiagnosisId = "Test Diagnosis";
Prescription.Date = "2009-01-01";
Prescription.DrugId = 1121;
Prescription.LpuId = 19;
Prescription.Number = 1024;
Prescription.OperatorId = 0;
Prescription.PhysicianId = 13;
Prescription.Quantity = 800;
Prescription.Series = 144;
//Prescription.ServedDate = "2009-01-01";
//Prescription.ServedDrugId = 1123;
//Prescription.ServedQuantity = 600;
//Prescription.Status = 0;
//Prescription.RecourseDate = "2009-01-01";
var addResult = scComponent.AddCardHolderServedPrescription(Prescription);
При запуске программы возникли следующие проблемы:
- закомментированные строки с ошибкой «Объект не поддерживает такое свойство или метод»
- Prescription.Date определяется как System.DateTime, но назначение JScript Date здесь не работает - но, похоже, оно принимает (или как-то преобразуется) строковую дату.
- Последняя строка с вызовом AddCardHolderServedPrescription завершается с ошибкой «Класс не поддерживает автоматизацию».
Вызовы к другим методам scComponent проходят корректно, поэтому я полагаю, что есть некоторые проблемы с типом CardHolderNewServedPrescriptionData. Теперь мне нужны некоторые подсказки, чтобы устранить ее - сообщения об ошибках скрипта не слишком информативны. Поиски в Google не дают значимой информации о методах диагностики.
Опять же, это работает как в моих тестах C #, так и в клиенте VB6, но не в JScript. Спасибо за любые идеи.
Определения типов и фрагменты интерфейса приведены ниже.
[Guid("08D183AF-BE28-4638-BAC0-C568C0FEAD45")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ICardHolderNewServedPrescriptionData
{
int Series { get; set; }
int Number { get; set; }
DateTime Date { get; set; }
string DiagnosisId { get; set; }
int DrugId { get; set; }
int Quantity { get; set; }
int LpuId { get; set; }
int PhysicianId { get; set; }
int OperatorId { get; set; }
int CategoryId { get; set; }
int Status { get; set; }
DateTime RecourseDate { get; set; }
DateTime ServedDate { get; set; }
int ServedDrugId { get; set; }
int ServedQuantity { get; set; }
}
[Guid("E0842E24-163E-4580-9AD6-1593F781D314")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Mine.CardHolderNewServedPrescriptionData")]
public class CardHolderNewServedPrescriptionData : ICardHolderNewServedPrescriptionData
{
public int Series { get; set; }
public int Number { get; set; }
public DateTime Date { get; set; }
public string DiagnosisId { get; set; }
public int DrugId { get; set; }
public int Quantity { get; set; }
public int LpuId { get; set; }
public int PhysicianId { get; set; }
public int OperatorId { get; set; }
public int CategoryId { get; set; }
public int Status { get; set; }
public DateTime RecourseDate { get; set; }
public DateTime ServedDate { get; set; }
public int ServedDrugId { get; set; }
public int ServedQuantity { get; set; }
}
[Guid("7C1331D7-320D-4201-889C-AF56BFE0D71A")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Mine.SCComponent")]
public class SCComponent : ISCComponent
{
/*class logic goes here*/
public int AddCardHolderServedPrescription(CardHolderNewServedPrescriptionData newServedPrescriptionData)
{
/*method body*/
}
}