首页 > 解决方案 > 如何在 Acumatica 移动应用程序中获取 GPS 位置?

问题描述

当技术人员开始开车前往现场时,我们的客户要求在约会屏幕中记录 GPS 位置。我向 AppointmentEntry 图表添加了一个新操作(基本上它是 StartAppointment 操作的副本,删除了一些代码)并将此操作添加到移动应用程序。问题是当我在移动应用程序上调用自定义操作时 fsAppointmentCopy.Mem_GPSLatitudeLongitude 为空,但在调用“开始约会”操作时它有一个值。我错过了什么?

    public PXAction<PX.Objects.FS.FSAppointment> StartDrive;

[PXButton]
[PXUIField(DisplayName = "Start Drive", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
protected virtual IEnumerable startDrive(PXAdapter adapter)
{
        List<FSAppointment> list = adapter.Get<FSAppointment>().ToList();
        foreach (FSAppointment fsAppointmentRow in list)
        {
            Base.SaveBeforeApplyAction(Base.AppointmentRecords.Cache, fsAppointmentRow);

            FSAppointment fsAppointmentCopy = (FSAppointment)Base.Caches[typeof(FSAppointment)].CreateCopy(fsAppointmentRow);


            var fsAppointmentDetRows = Base.AppointmentDetServices.SelectWindowed(0, 1);

            if (fsAppointmentDetRows.Count == 0)
            {
                throw new PXException(TX.Error.APPOINTMENT_START_VALIDATE_SERVICE, PXErrorLevel.Error);
            }

            using (var ts = new PXTransactionScope())
            {

                if (Base.IsMobile == true
                        && Base.SetupRecord.Current != null
                            && Base.SetupRecord.Current.TrackAppointmentLocation == true
                                && string.IsNullOrEmpty(fsAppointmentCopy.Mem_GPSLatitudeLongitude) == false)
                {
                    string[] parts = fsAppointmentCopy.Mem_GPSLatitudeLongitude.Split(':');
                    fsAppointmentCopy.GPSLatitudeStart = decimal.Parse(parts[0]);
                    fsAppointmentCopy.GPSLongitudeStart = decimal.Parse(parts[1]);
                }

                Base.ChangeStatusSave(fsAppointmentCopy);

                ts.Complete();
            }

        }
        return list;
}

标签: acumatica

解决方案


您的示例“启动驱动器”操作对我有用(稍作修改以使其适用于最新的 Acumatica 版本): 字段在调试器中具有非空值

有几点值得检查:

  • 仔细检查移动 Acumatica 应用程序是否被授予访问位置的权限。(在 iOS 上:设置 / Acumatica / 位置)
  • 您确定您的代码在从现场读取坐标时运行到一定程度吗?在记录保存期间(某些字段未填写)或验证至少存在一个详细信息行时,它可能会失败
  • 确保移动屏幕映射仍然包含"OtherInformationSourceInfoLocation#GPSLatitudeLongitude"with 的定义special = GpsCoords

推荐阅读