The following code is a translation of a VB macro to create a new time card. The issue that I am having is that the Compose statement on line #37 set the view's parent to null. This causes the SetValue on line #49 to fail with a NullReferenceException. Everything works if I set the field variable after the compose statement (move line #10 to be after line #37). As I said, this is a straight translation of the VB script generated by the macro recorder.
Any ideas?
- ACCPAC.Advantage.DBLink mDBLinkCmpRW;
- mDBLinkCmpRW = _session.OpenDBLink(DBLinkType.Company, DBLinkFlags.ReadWrite);
- DBLink mDBLinkSysRW;
- mDBLinkSysRW = _session.OpenDBLink(DBLinkType.System, DBLinkFlags.ReadWrite);
- View UPTIMECARD2header;
- ViewFields UPTIMECARD2headerFields;
- UPTIMECARD2header = mDBLinkCmpRW.OpenView("UP0031");
- UPTIMECARD2headerFields = UPTIMECARD2header.Fields;
- View UPTIMECARD2detail1;
- ViewFields UPTIMECARD2detail1Fields;
- UPTIMECARD2detail1 = mDBLinkCmpRW.OpenView("UP0032");
- UPTIMECARD2detail1Fields = UPTIMECARD2detail1.Fields;
- View UPTIMECARD2detail2;
- ViewFields UPTIMECARD2detail2Fields;
- UPTIMECARD2detail2 = mDBLinkCmpRW.OpenView("UP0127");
- UPTIMECARD2detail2Fields = UPTIMECARD2detail2.Fields;
- View UPTIMECARD2detail3;
- ViewFields UPTIMECARD2detail3Fields;
- UPTIMECARD2detail3 = mDBLinkCmpRW.OpenView("UP0128");
- UPTIMECARD2detail3Fields = UPTIMECARD2detail3.Fields;
- View UPTIMECARD2detail4;
- ViewFields UPTIMECARD2detail4Fields;
- UPTIMECARD2detail4 = mDBLinkCmpRW.OpenView("UP0042");
- UPTIMECARD2detail4Fields = UPTIMECARD2detail4.Fields;
- View UPTIMECARD2detail5;
- ViewFields UPTIMECARD2detail5Fields;
- UPTIMECARD2detail5 = mDBLinkCmpRW.OpenView("UP0141");
- UPTIMECARD2detail5Fields = UPTIMECARD2detail5.Fields;
- UPTIMECARD2header.Compose(new[] {UPTIMECARD2detail1, UPTIMECARD2detail2});
- UPTIMECARD2detail1.Compose(new[] {UPTIMECARD2header, UPTIMECARD2detail3, UPTIMECARD2detail4});
- UPTIMECARD2detail2.Compose(new[] {UPTIMECARD2header});
- UPTIMECARD2detail3.Compose(new[] {UPTIMECARD2detail1});
- UPTIMECARD2detail4.Compose(new[] {UPTIMECARD2detail1, UPTIMECARD2detail5});
- UPTIMECARD2detail5.Compose(new[] {UPTIMECARD2detail4});
- UPTIMECARD2headerFields.FieldByName("EMPLOYEE").SetValue("095547264", true); //' Employee
- UPTIMECARD2headerFields.FieldByName("TIMECARD").SetValue("1", false); //' Timecard
- UPTIMECARD2headerFields.FieldByName("PEREND").SetValue(new DateTime(2017, 10, 27).ToOADate(), false); //' Period End Date
- temp = UPTIMECARD2header.Exists;
- UPTIMECARD2headerFields.FieldByName("PROCESSCMD").SetValue("1", false); //' Process Command Code