public CORE.DAL.Entities.Comment GetCommentData(int commentAI)
        {
            CORE.DAL.Entities.Comment comment = new CORE.DAL.Entities.Comment();
            using (IObjectManager OM = _helper.GetServicesManager().CreateProxy <IObjectManager>(ExecutionIdentity.CurrentUser))
            {
                QueryRequest QR = new QueryRequest();
                QR.ObjectType = new ObjectTypeRef()
                {
                    Name = "Comment"
                };
                QR.Condition = $"'Artifact ID' == {commentAI}";
                QR.Fields    = new List <FieldRef>()
                {
                    new FieldRef()
                    {
                        Name = "Comment"
                    },
                    new FieldRef()
                    {
                        Name = "System Created On"
                    },
                    new FieldRef()
                    {
                        Name = "Thumbnail_Image_base64"
                    }
                };
                var task = OM.QueryAsync(_workspaceID, QR, 1, int.MaxValue);
                task.Wait();
                comment.Name        = task.Result.Objects.FirstOrDefault().FieldValues[0].Value.ToString();
                comment.CreatedOn   = task.Result.Objects.FirstOrDefault().FieldValues[1].Value.ToString();
                comment.imageBase64 = task.Result.Objects.FirstOrDefault().FieldValues[2].Value.ToString();
            }

            return(comment);
        }
        /// <summary>
        /// Gets the YAML file in the Relativity Instance and returns their ArtifactID and LastModifiedOn (essentially last uploaded date for comparisons later)
        /// </summary>
        /// <param name="serviceManager"></param>
        /// <param name="yamlFileName"></param>
        /// <returns></returns>
        public async Task <List <Tuple <int, DateTime?> > > QueryYamlFileArtifactIDsByNameAsync(IServicesMgr serviceManager, string yamlFileName)
        {
            List <Tuple <int, DateTime?> > retVal = new List <Tuple <int, DateTime?> >();

            using (IObjectManager objectManager = serviceManager.CreateProxy <IObjectManager>(ExecutionIdentity.System))
            {
                try
                {
                    Condition condition1 = new Relativity.Services.TextCondition(PermissionFieldNames.Name,
                                                                                 Relativity.Services.TextConditionEnum.EqualTo, yamlFileName);

                    QueryRequest queryRequest = new QueryRequest()
                    {
                        ObjectType = new ObjectTypeRef()
                        {
                            ArtifactTypeID = Constants.ArtifactTypes.ResourceFileId
                        },
                        Condition = condition1.ToQueryString(),
                        Fields    = new List <FieldRef>
                        {
                            new FieldRef
                            {
                                Name = "LastModifiedOn"
                            }
                        }
                    };

                    QueryResult results =
                        await objectManager.QueryAsync(Constants.Connections.WorkspaceIdAdmin, queryRequest, 1, 100);

                    if (results.TotalCount > 0)
                    {
                        //retVal.AddRange(results.Results.Select(a => Tuple.Create(a.Artifact.ArtifactID, a.Artifact.Fields.Find(x => x.Name.Equals("LastModifiedOn")).ValueAsDate)));
                        retVal.AddRange(results.Objects.Select(a =>
                                                               Tuple.Create(a.ArtifactID, (DateTime?)a["LastModifiedOn"].Value)));
                    }
                    else
                    {
                        _logHelper.LogError(
                            $"DAPI - {nameof(QueryYamlFileArtifactIDsByNameAsync)} - Unable to find YAML file ({yamlFileName})");
                    }
                }
                catch (Exception ex)
                {
                    _logHelper.LogError(
                        $"DAPI - {nameof(QueryYamlFileArtifactIDsByNameAsync)} - Error while querying resource file ArtifactID: {ex}");
                }
            }

            return(retVal);
        }
        /// <summary>
        /// Gets all the User IDs in the specific group designed for DynamicAPI
        /// </summary>
        /// <param name="serviceManager"></param>
        /// <param name="groupName"></param>
        /// <returns></returns>
        private async Task <List <int> > GetUsersInGroupByName(IServicesMgr serviceManager, string groupName)
        {
            List <int> userIds = new List <int>();

            using (IPermissionManager permissionManager = ConnectionHelper.Helper().GetServicesManager().CreateProxy <IPermissionManager>(ExecutionIdentity.System))
                using (IObjectManager objectManager = ConnectionHelper.Helper().GetServicesManager()
                                                      .CreateProxy <IObjectManager>(ExecutionIdentity.System))
                {
                    // Get Group id (from specified name)
                    Condition condition1 = new Relativity.Services.TextCondition(PermissionFieldNames.Name,
                                                                                 Relativity.Services.TextConditionEnum.EqualTo, groupName);

                    QueryRequest queryRequest = new QueryRequest()
                    {
                        ObjectType = new ObjectTypeRef()
                        {
                            ArtifactTypeID = Constants.ArtifactTypes.GroupId
                        },
                        Condition = condition1.ToQueryString()
                    };

                    QueryResult results =
                        await objectManager.QueryAsync(Constants.Connections.WorkspaceIdAdmin, queryRequest, 1, 100);

                    if (results.TotalCount == 0)
                    {
                        throw new Exception(
                                  $"Group ({groupName}) is not present in the instance of relativity. Create the group and add the user to this group to access DynamicAPI");
                    }

                    if (results.TotalCount > 1)
                    {
                        throw new Exception(Constants.Group.MultipleGroupsExist);
                    }

                    // Get list of users in that group
                    GroupRef       groupRef = new GroupRef(results.Objects.First().ArtifactID);
                    List <UserRef> users    =
                        await permissionManager.GetWorkspaceGroupUsersAsync(Constants.Connections.WorkspaceIdAdmin, groupRef);

                    if (users.Count == 0)
                    {
                        throw new Exception($"Not able to find any users in the group ({groupName})");
                    }

                    userIds = users.Select(x => x.ArtifactID).ToList();
                }

            return(userIds);
        }
Пример #4
0
        /// <summary>
        /// Returns all of the fields for a given object type.
        /// Does not include system fields.
        /// </summary>
        /// <param name="objMgr"></param>
        /// <param name="workspaceId"></param>
        /// <param name="objectTypeId"></param>
        /// <returns></returns>
        public static async Task <List <Field> > GetAllFieldsForObject(
            IObjectManager objMgr,
            int workspaceId,
            int objectTypeId)
        {
            var objectTypeCondition = new WholeNumberCondition(
                "Object Type Artifact Type ID",
                NumericConditionEnum.EqualTo,
                objectTypeId);

            // we want to exclude system types
            var          textCondition          = new TextCondition("Name", TextConditionEnum.Like, "System");
            NotCondition excludeSystemCondition = textCondition.Negate();

            var condition = new CompositeCondition(
                objectTypeCondition,
                CompositeConditionEnum.And,
                excludeSystemCondition);

            var queryRequest = new QueryRequest
            {
                ObjectType = new ObjectTypeRef {
                    ArtifactTypeID = FIELD_OBJ_TYPE_ID
                },
                Condition = condition.ToQueryString(),
                Fields    = new List <FieldRef>
                {
                    //new FieldRef() { Name = "Name" },
                    new FieldRef {
                        Name = "Field Type"
                    }
                },
                IncludeIDWindow          = false,
                IncludeNameInQueryResult = true
            };

            int start = 0;

            // a document shouldn't have more than 1000 fields, I would hope
            const int LENGTH = 1000;

            var retVal = new List <Field>();

            QueryResult result = await objMgr.QueryAsync(workspaceId, queryRequest, start, LENGTH);

            foreach (RelativityObject field in result.Objects)
            {
                if (!field.FieldValuePairExists("Field Type"))
                {
                    continue;  // skip
                }
                // determine the field type
                string    fieldTypeName = field.FieldValues.First().Value.ToString();
                FieldType type;
                switch (fieldTypeName)
                {
                case FieldTypes.CURRENCY:
                    type = FieldType.Currency;
                    break;

                case FieldTypes.DATE:
                    type = FieldType.Date;
                    break;

                case FieldTypes.DECIMAL:
                    type = FieldType.Decimal;
                    break;

                case FieldTypes.FILE:
                    type = FieldType.File;
                    break;

                case FieldTypes.FIXED_LENGTH_TXT:
                    type = FieldType.FixedLengthText;
                    break;

                case FieldTypes.LONG_TXT:
                    type = FieldType.LongText;
                    break;

                case FieldTypes.MULTI_CHOICE:
                    type = FieldType.MultipleChoice;
                    break;

                case FieldTypes.MULTI_OBJECT:
                    type = FieldType.MultipleObject;
                    break;

                case FieldTypes.SINGLE_CHOICE:
                    type = FieldType.SingleChoice;
                    break;

                case FieldTypes.SINGLE_OBJECT:
                    type = FieldType.SingleObject;
                    break;

                case FieldTypes.USER:
                    type = FieldType.User;
                    break;

                case FieldTypes.WHOLE_NUMBER:
                    type = FieldType.WholeNumber;
                    break;

                case FieldTypes.YES_NO:
                    type = FieldType.YesNo;
                    break;

                default:
                    type = FieldType.Empty;
                    break;
                }

                var fieldToAdd = new Field
                {
                    ArtifactID = field.ArtifactID,
                    FieldType  = type,
                    Name       = field.Name
                };
                retVal.Add(fieldToAdd);
            }

            return(retVal);
        }