void UpdateWsDocData(ref tagWSDOCUMENT wsDoc, WdDocument wdDoc) { Logger.LogTrace(string.Format("Update Ws local data from wdDocument. {0}", wdDoc.AsString())); wsDoc.bstrDocumentID = WsDocumentID.Create(wdDoc.DocId, wdDoc.VersionNumber); wsDoc.bstrDescription = wdDoc.FIleName; wsDoc.bstrExtension = wdDoc.Ext; wsDoc.bstrType = FileUtils.GetFileTypeFromExt(wdDoc.Ext); wsDoc.dModifiedTime = wdDoc.ModifiedTime; wsDoc.bstrAuthor = wdDoc.Author; wsDoc.bstrClass = wdDoc.SecurityClassName; wsDoc.bstrOperator = wdDoc.Operator; }
public WdDocument GetByPath(int sessionhandle, string path) { Logger.LogTrace(string.Format("Try to get file from WD. SessionHandle={0}. Path={1}", sessionhandle, path)); var sbDocId = new StringBuilder(MAX_STR); var sbrealName = new StringBuilder(MAX_STR); var sbExt = new StringBuilder(MAX_STR); var sbFilePath = new StringBuilder(MAX_STR); var sbVersionNumber = new StringBuilder(MAX_STR); var sbUpdated = new StringBuilder(MAX_STR); var sbOwner = new StringBuilder(MAX_STR); var sbClassName = new StringBuilder(MAX_STR); var sbprofileName = new StringBuilder(MAX_STR); var res = 0; foreach (var p in new[] { new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_FILENAME, sbDocId, true), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_EXTENSION, sbExt, true), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_XNAME, sbrealName, false), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_PATHFILE, sbFilePath, true), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_VERSION, sbVersionNumber, true), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_OWNER, sbOwner, false), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_UPDATED, sbUpdated, false), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_CLASSNAME, sbClassName, false), new Tuple<int, StringBuilder, bool>(WORLDOX.WDAPI_GF_FILE_GROUP, sbprofileName, false), }) { res = _wdApi.WDAPI_GetProfileField(path, null, res, p.Item1, p.Item2, p.Item2.Capacity); if (res == 0) { if (p.Item3) //cannot get field and field is critical { throw new WdFileNotFoundException(path, string.Format("GetProfileField|Cannot get Field={0} for Document={1}", p.Item1, path), res, "WDAPI_GetProfileField"); } else { Logger.LogError(string.Format("Cannot get Field={0} for Document={1}. ErrorCode={2}. Field Skipped as not important.", p.Item1, path, res)); } } } var sVersionNumber = sbVersionNumber.ToString(); DateTime dtUpdated; if (!DateTime.TryParse(sbUpdated.ToString(), out dtUpdated)) { dtUpdated = DateTime.MinValue; Logger.LogError(string.Format("Cannot parse datetime = {0}", sbUpdated.ToString())); } bool isLocked = false; bool isLockedByCurrentUser = true; IsCheckedOut(sessionhandle, sbDocId.ToString(),out isLocked, out isLockedByCurrentUser); var result= new WdDocument { DocId = sbDocId.ToString(), FIleName = sbrealName.ToString(), LocalFilePath = sbFilePath.ToString(), VersionNumber = string.IsNullOrEmpty(sVersionNumber) ? LATEST_VERSION : Convert.ToInt32(sVersionNumber), Ext = sbExt.ToString().Trim('.'), IsLocked = isLocked, IsLockedByCurrentUser = isLockedByCurrentUser, Owner = sbOwner.ToString(), ModifiedTime = dtUpdated, Author = sbOwner.ToString(), SecurityClassName=sbClassName.ToString(), FromLFS = string.Equals(sbprofileName.ToString().ToLowerInvariant(), "<no profile>"), Operator = "Operator" }; Logger.LogTrace(string.Format("Found document : {0}", result.AsString())); return result; }