public static OT_Document create_multifile_doc(this OT_Document doc, int?createdby_mfuserid = null, params string[] files)
        {
            Vault             vault       = doc.objVerEx.Vault;
            ObjVerEx          version     = doc.objVerEx;
            SourceObjectFiles sourceFiles = new SourceObjectFiles();

            foreach (string file in files)
            {
                FileInfo fi = new FileInfo(file);
                sourceFiles.AddFile(fi.Name.Replace(fi.Extension, ""), fi.Extension.Replace(".", ""), fi.FullName);
            }
            ObjectVersionAndProperties obj = vault.ObjectOperations.CreateNewObjectEx(OT_Document.TypeID, version.Properties, sourceFiles, false,
                                                                                      createdby_mfuserid == null);

            if (createdby_mfuserid != null)
            {
                TypedValue created_by = new TypedValue();
                created_by.SetValue(MFDataType.MFDatatypeLookup, createdby_mfuserid.Value);
                obj = doc.objVerEx.Vault.ObjectPropertyOperations.SetCreationInfoAdmin(obj.ObjVer, true, created_by, false, null);
                doc.objVerEx.Vault.ObjectOperations.CheckIn(obj.ObjVer);
            }

            return(new OT_Document()
            {
                objVerEx = new ObjVerEx(obj.Vault, obj)
            });
        }
        public static void replace_files(this OT_Document document, string singledoc_newfilepath = null, string[] multidoc_newfilespath = null)
        {
            Vault vault        = document.objVerEx.Vault;
            var   obj          = document.objVerEx;
            bool  isSingleFile = vault.ObjectOperations.IsSingleFileObject(obj.ObjVer);

            //singlefile document
            if (isSingleFile && string.IsNullOrEmpty(singledoc_newfilepath))
            {
                throw new Exception("No file supplied for single-file document.");
            }

            //multifile document
            if (!isSingleFile && (multidoc_newfilespath == null || multidoc_newfilespath.Length == 0))
            {
                throw new Exception("No file(s) supplied for multi-file document.");
            }

            ObjectVersion new_version = vault.ObjectOperations.CheckOut(obj.ObjID);

            try {
                ObjVerEx          new_versionex = new ObjVerEx(vault, new_version);
                SourceObjectFiles files         = new SourceObjectFiles();

                if (isSingleFile)
                {
                    FileInfo fi = new FileInfo(singledoc_newfilepath);
                    files.AddFile(fi.Name.Replace(fi.Extension, ""), fi.Extension.Replace(".", ""), fi.FullName);

                    //change the file type
                    IEnumerator obfile_enumerator = vault.ObjectFileOperations.GetFiles(new_version.ObjVer).GetEnumerator();
                    obfile_enumerator.MoveNext();
                    ObjectFile single_fileobj = obfile_enumerator.Current as ObjectFile;
                    if (single_fileobj == null)
                    {
                        throw new Exception("Single file for this document not found.");
                    }
                    vault.ObjectFileOperations.RenameFile(new_versionex.ObjVer, single_fileobj.FileVer, fi.Name.Replace(fi.Extension, ""), fi.Extension.Replace(".", ""), false);
                }
                else
                {
                    foreach (string file in multidoc_newfilespath)
                    {
                        FileInfo fi = new FileInfo(file);
                        files.AddFile(fi.Name.Replace(fi.Extension, ""), fi.Extension.Replace(".", ""), fi.FullName);
                    }
                }
                new_versionex.ReplaceFiles(files);
                new_versionex.CheckIn();
                document.objVerEx = new_versionex;
            } catch {
                if (new_version.ObjectCheckedOut)
                {
                    vault.ObjectOperations.ForceUndoCheckout(new_version.ObjVer);
                }
                throw;
            }
        }
        public static OT_Document create_singlefile_doc(this OT_Document doc, string filepath, int?createdby_mfuserid = null)
        {
            FileInfo fi = new FileInfo(filepath);
            ObjectVersionAndProperties obj = doc.objVerEx.Vault.ObjectOperations.CreateNewSFDObject(OT_Document.TypeID, doc.objVerEx.Properties,
                                                                                                    new SourceObjectFile {
                SourceFilePath = fi.FullName,
                Title          = fi.Name.Replace(fi.Extension, ""),
                Extension      = fi.Extension.Replace(".", "")
            }, createdby_mfuserid == null);

            if (createdby_mfuserid != null)
            {
                TypedValue created_by = new TypedValue();
                created_by.SetValue(MFDataType.MFDatatypeLookup, createdby_mfuserid.Value);
                obj = doc.objVerEx.Vault.ObjectPropertyOperations.SetCreationInfoAdmin(obj.ObjVer, true, created_by, false, null);
                doc.objVerEx.Vault.ObjectOperations.CheckIn(obj.ObjVer);
            }

            return(new OT_Document()
            {
                objVerEx = new ObjVerEx(obj.Vault, obj)
            });
        }