private void processAssignment(ProjectDataSet.AssignmentRow assignmentRow, ProjectDataSet projectDataSet, SPListItem listItem)
        {
            var taskRow = (ProjectDataSet.TaskRow)projectDataSet.Task.Select($"TASK_UID=\'{assignmentRow.TASK_UID}\'")[0];

            try
            {
                listItem[listItem.Fields.GetFieldByInternalName(TaskHierarchy).Id] = getHierarchy(projectDataSet, taskRow.TASK_PARENT_UID);
                listItem[listItem.Fields.GetFieldByInternalName(IsAssignment).Id]  = "1";
                listItem[listItem.Fields.GetFieldByInternalName(Title).Id]         = taskRow.TASK_NAME;
                listItem[listItem.Fields.GetFieldByInternalName(Wbs).Id]           = taskRow.TASK_WBS;
                listItem[listItem.Fields.GetFieldByInternalName(TaskUid).Id]       = $"{taskRow.TASK_UID}.{assignmentRow.ASSN_UID}";
                listItem[listItem.Fields.GetFieldByInternalName(TaskOrder).Id]     = taskRow.TASK_ID;

                if (!assignmentRow.IsASSN_NOTESNull())
                {
                    listItem[listItem.Fields.GetFieldByInternalName(Notes).Id] = assignmentRow.ASSN_NOTES;
                }

                listItem[listItem.Fields.GetFieldByInternalName(LastPublished).Id] = DateTime.Now;
                var resourceWssId = getResourceWssId(assignmentRow.RES_UID_OWNER);

                if (resourceWssId != 0)
                {
                    listItem[listItem.Fields.GetFieldByInternalName(AssignedTo).Id] = resourceWssId;
                }

                listItem[Summary] = taskRow.TASK_IS_SUMMARY.ToString();

                ProcessFieldToPublish(assignmentRow, projectDataSet, listItem, taskRow);

                if (!string.IsNullOrWhiteSpace(strTimesheetField))
                {
                    if (listItem.Fields.ContainsField(TimeSheetId))
                    {
                        var dataRows = projectDataSet.TaskCustomFields.Select(
                            $"TASK_UID=\'{taskRow.TASK_UID}\' AND MD_PROP_UID=\'{strTimesheetField}\'");

                        listItem[TimeSheetId] = dataRows.Length > 0
                            ? (object)dataRows[0][FlagValue].ToString()
                            : 0;
                    }
                }

                listItem.Update();
            }
            catch (Exception ex)
            {
                myLog.WriteEntry($"Error processing Assignment ({taskRow.TASK_NAME}): {ex.Message}{ex.StackTrace}", EventLogEntryType.Error, 330);
            }
        }
        private void ProcessFieldToPublish(
            ProjectDataSet.AssignmentRow assignmentRow,
            ProjectDataSet projectDataSet,
            SPListItem listItem,
            ProjectDataSet.TaskRow taskRow)
        {
            Guard.ArgumentIsNotNull(taskRow, nameof(taskRow));
            Guard.ArgumentIsNotNull(listItem, nameof(listItem));
            Guard.ArgumentIsNotNull(projectDataSet, nameof(projectDataSet));
            Guard.ArgumentIsNotNull(assignmentRow, nameof(assignmentRow));

            foreach (string field in arrFieldsToPublish)
            {
                var fieldSplit = field.Split('#');

                if (fieldSplit.Length < 8)
                {
                    throw new InvalidOperationException("Invalid fieldSplit length");
                }

                var fieldName     = fieldSplit[0];
                var wssFieldName  = fieldSplit[1];
                var assnFieldName = fieldSplit[2];
                var fieldCategory = fieldSplit[3];
                var fieldType     = fieldSplit[4];
                var multiplier    = fieldSplit[5];
                var rollDown      = fieldSplit[7];

                try
                {
                    if (fieldName == TaskResnames)
                    {
                        listItem[listItem.Fields.GetFieldByInternalName(ResourceNames).Id] = getResourceName(assignmentRow.RES_UID, projectDataSet);
                    }
                    else if (fieldName == TaskPctComp)
                    {
                        float pctWorkComplete = assignmentRow.ASSN_PCT_WORK_COMPLETE;
                        pctWorkComplete = pctWorkComplete / (float)100.00;
                        listItem[listItem.Fields.GetFieldByInternalName(PercentComplete).Id] = pctWorkComplete;
                    }
                    else
                    {
                        if (fieldCategory == FieldCategoryThree)
                        {
                            string fieldData = null;
                            var    drAssn    = projectDataSet.AssignmentCustomFields.Select(
                                $"ASSN_UID=\'{assignmentRow.ASSN_UID}\' AND MD_PROP_UID=\'{assnFieldName}\'");

                            if (drAssn.Length >= 1)
                            {
                                fieldData = GetFieldData(fieldType, drAssn, fieldName);
                            }
                            else if (rollDown == bool.TrueString)
                            {
                                var dataRows = projectDataSet.TaskCustomFields.Select(
                                    $"TASK_UID=\'{taskRow.TASK_UID}\' AND MD_PROP_ID=\'{fieldName}\'");

                                if (dataRows.Length >= 1)
                                {
                                    fieldData = GetFieldData(fieldType, dataRows, fieldName);
                                }
                            }

                            listItem[listItem.Fields.GetFieldByInternalName(wssFieldName).Id] = fieldData;
                        }
                        else if (fieldCategory == FieldCategoryTwo)
                        {
                            var dataRows = projectDataSet.AssignmentCustomFields.Select(
                                $"ASSN_UID=\'{assignmentRow.ASSN_UID}\' AND MD_PROP_ID=\'{assnFieldName}\'");

                            if (dataRows.Length >= 1)
                            {
                                var fieldData = GetFieldData(fieldType, dataRows, fieldName);
                                listItem[listItem.Fields.GetFieldByInternalName(wssFieldName).Id] = fieldData;
                            }
                        }
                        else if (fieldCategory == FieldCategoryOne)
                        {
                            ProcessFilterCategoryOne(
                                assignmentRow,
                                projectDataSet,
                                listItem,
                                taskRow,
                                fieldName,
                                wssFieldName,
                                assnFieldName,
                                fieldType,
                                multiplier);
                        }
                    }
                }
                catch (Exception ex)
                {
                    myLog.WriteEntry(
                        $"Error processing Assignment ({taskRow.TASK_NAME}) Field ({fieldName}): {ex.Message}{ex.StackTrace}",
                        EventLogEntryType.Error,
                        330);
                }
            }
        }