protected override bool Process(Package package)
        {
            CRSMEmail    activity = package.Message;
            EMailAccount account  = package.Account;

            if (activity.IsIncome != true || activity.OwnerID != null || activity.WorkgroupID != null)
            {
                return(false);
            }

            bool assigned = false;

            if (account.DefaultEmailAssignmentMapID != null)
            {
                EPAssignmentProcessHelper <CRSMEmail> processor = PXGraph.CreateInstance <EPAssignmentProcessHelper <CRSMEmail> >();
                assigned = processor.Assign(activity, account.DefaultEmailAssignmentMapID);
            }
            if (!assigned)
            {
                activity.OwnerID     = account.DefaultOwnerID;
                activity.WorkgroupID = account.DefaultWorkgroupID;
            }

            return(true);
        }
        public virtual bool Assign(Table item, int?assignmentMapID)
        {
            if (item == null)
            {
                throw new ArgumentNullException(nameof(item));
            }

            if (assignmentMapID < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(assignmentMapID));
            }

            EPAssignmentMap map =
                PXSelect <EPAssignmentMap, Where <EPAssignmentMap.assignmentMapID, Equal <Required <EPAssignmentMap.assignmentMapID> > > >
                .SelectWindowed(this, 0, 1, assignmentMapID);

            if (map == null)
            {
                return(false);
            }

            ApproveInfo info;

            switch (map.MapType)
            {
            case EPMapType.Legacy:
                try
                {
                    info = new EPAssignmentProcessHelper <Table>(_Graph).Assign(item, map, false).FirstOrDefault();
                    if (info != null)
                    {
                        item.OwnerID     = info.OwnerID;
                        item.WorkgroupID = info.WorkgroupID;

                        return(true);
                    }
                }
                catch
                {
                    return(false);
                }
                return(false);

            case EPMapType.Assignment:
                try
                {
                    info = new EPAssignmentHelper <Table>(_Graph).Assign(item, map, false, 0).FirstOrDefault();
                    if (info != null)
                    {
                        item.OwnerID     = info.OwnerID;
                        item.WorkgroupID = info.WorkgroupID;

                        return(true);
                    }
                }
                catch
                {
                    return(false);
                }
                return(false);

            case EPMapType.Approval:
                throw new ArgumentException(nameof(assignmentMapID));

            default:
                return(false);
            }
        }