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); }
/// <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); }