本文整理汇总了C#中DigitalPlatform.rms.Client.RmsChannel.DoCopyRecord方法的典型用法代码示例。如果您正苦于以下问题:C# RmsChannel.DoCopyRecord方法的具体用法?C# RmsChannel.DoCopyRecord怎么用?C# RmsChannel.DoCopyRecord使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DigitalPlatform.rms.Client.RmsChannel
的用法示例。
在下文中一共展示了RmsChannel.DoCopyRecord方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DoOperMove
//.........这里部分代码省略.........
nRet = this.App.SetOperation(
ref domNew,
"moved",
sessioninfo.UserID, // strUserID,
"",
out strError);
if (nRet == -1)
goto ERROR1;
string strWarning = "";
// 合并新旧记录
// return:
// -1 出错
// 0 正确
// 1 有部分修改没有兑现。说明在strError中
string strNewXml = "";
nRet = MergeTwoItemXml(
sessioninfo,
domSourceExist,
domNew,
out strNewXml,
out strError);
if (nRet == -1)
goto ERROR1;
if (nRet == 1)
strWarning = strError;
// 移动记录
byte[] output_timestamp = null;
// TODO: Copy后还要写一次?因为Copy并不写入新记录。
// 其实Copy的意义在于带走资源。否则还不如用Save+Delete
lRet = channel.DoCopyRecord(info.OldRecPath,
info.NewRecPath,
true, // bDeleteSourceRecord
out output_timestamp,
out strOutputPath,
out strError);
if (lRet == -1)
{
strError = "DoCopyRecord() error :" + strError;
goto ERROR1;
}
// Debug.Assert(strOutputPath == info.NewRecPath);
string strTargetPath = strOutputPath;
lRet = channel.DoSaveTextRes(strTargetPath,
strNewXml,
false, // include preamble?
"content",
output_timestamp,
out output_timestamp,
out strOutputPath,
out strError);
if (lRet == -1)
{
strError = "移动操作中," + this.ItemName + "记录 '" + info.OldRecPath + "' 已经被成功移动到 '" + strTargetPath + "' ,但在写入新内容时发生错误: " + strError;
if (channel.ErrorCode == ChannelErrorCode.TimestampMismatch)
{
// 不进行反复处理。
// 因为源已经移动,情况很复杂
}
示例2: SaveRecord
// 保存记录
// parameters:
// strRecordPath 记录路径。如果==null,表示直接用textBox_recPath中当前的内容作为路径
public void SaveRecord(string strRecordPath)
{
if (strRecordPath != null)
textBox_recPath.Text = strRecordPath;
if (textBox_recPath.Text == "")
{
MessageBox.Show(this, "路径不能为空");
return;
}
ResPath respath = new ResPath(textBox_recPath.Text);
Uri uri = null;
try
{
uri = new Uri(respath.Url);
}
catch (Exception ex)
{
MessageBox.Show(this, "路径错误: " + ex.Message);
return;
}
// 保存到文件
if (uri.IsFile)
{
MessageBox.Show(this, "暂时不支持保存到文件");
return;
}
string strError;
string strXml = "";
bool bHasUploadedFile = false;
int nRet = GetXmlRecord(out strXml,
out bHasUploadedFile,
out strError);
if (nRet == -1)
{
MessageBox.Show(this, strError);
return;
}
byte [] baOutputTimeStamp = null;
string strOutputPath = "";
long lRet = 0;
int nUploadCount = 0;
// 使用Channel
RmsChannel channelSave = channel;
channel = Channels.GetChannel(respath.Url);
Debug.Assert(channel != null, "Channels.GetChannel 异常");
try
{
stop.OnStop += new StopEventHandler(this.DoStop);
stop.Initial("正在保存记录 " + respath.FullPath);
stop.BeginLoop();
EnableControlsInLoading(true);
//string strTemp = ByteArray.GetHexTimeStampString(this.TimeStamp);
if (String.IsNullOrEmpty(this.strDatabaseOriginPath) == false
&& bHasUploadedFile == true
&& respath.FullPath != this.strDatabaseOriginPath)
{
ResPath respath_old = new ResPath(this.strDatabaseOriginPath);
if (respath_old.Url != respath.Url)
{
MessageBox.Show(this, "目前暂不支持跨服务器情况下的资源复制。本记录中原有的已上载资源,在另存到目标库的时丢失(为空),请注意保存完后手动上载。");
goto SKIPCOPYRECORD;
}
// 复制记录
// return:
// -1 出错。错误信息在strError中
// 0或者其他 成功
nRet = channel.DoCopyRecord(respath_old.Path,
respath.Path,
false, // bool bDeleteOriginRecord,
out baOutputTimeStamp,
out strOutputPath,
out strError);
if (nRet == -1)
{
MessageBox.Show(this, "复制资源时发生错误: " + strError);
}
else
{
//.........这里部分代码省略.........
示例3: CopyBiblioChildItems
// 复制属于同一书目记录的全部实体记录
// parameters:
// strAction copy / move
// return:
// -2 目标实体库不存在,无法进行复制或者删除
// -1 error
// >=0 实际复制或者移动的实体记录数
public int CopyBiblioChildItems(RmsChannel channel,
string strAction,
List<DeleteEntityInfo> entityinfos,
string strTargetBiblioRecPath,
XmlDocument domOperLog,
out string strError)
{
strError = "";
if (entityinfos == null || entityinfos.Count == 0)
return 0;
int nOperCount = 0;
XmlNode root = null;
if (domOperLog != null)
{
root = domOperLog.CreateElement(strAction == "copy" ? "copy" + this.ItemNameInternal + "Records" : "move" + this.ItemNameInternal + "Records");
domOperLog.DocumentElement.AppendChild(root);
}
// 获得目标书目库下属的实体库名
string strTargetItemDbName = "";
string strTargetBiblioDbName = ResPath.GetDbName(strTargetBiblioRecPath);
// return:
// -1 出错
// 0 没有找到
// 1 找到
int nRet = this.GetItemDbName(strTargetBiblioDbName,
out strTargetItemDbName,
out strError);
if (nRet == 0 || string.IsNullOrEmpty(strTargetItemDbName) == true)
{
return -2; // 目标实体库不存在
}
string strParentID = ResPath.GetRecordId(strTargetBiblioRecPath);
if (string.IsNullOrEmpty(strParentID) == true)
{
strError = "目标书目记录路径 '" + strTargetBiblioRecPath + "' 不正确,无法获得记录号";
return -1;
}
List<string> newrecordpaths = new List<string>();
List<string> oldrecordpaths = new List<string>();
for (int i = 0; i < entityinfos.Count; i++)
{
DeleteEntityInfo info = entityinfos[i];
byte[] output_timestamp = null;
string strOutputRecPath = "";
// this.EntityLocks.LockForWrite(info.ItemBarcode);
try
{
XmlDocument dom = new XmlDocument();
try
{
dom.LoadXml(info.OldRecord);
}
catch (Exception ex)
{
strError = "记录 '" + info.RecPath + "' 装入XMLDOM发生错误: " + ex.Message;
goto ERROR1;
}
DomUtil.SetElementText(dom.DocumentElement,
"parent",
strParentID);
// 复制的情况
if (strAction == "copy")
{
// 避免refID重复
DomUtil.SetElementText(dom.DocumentElement,
"refID",
null);
}
long lRet = channel.DoCopyRecord(info.RecPath,
strTargetItemDbName + "/?",
strAction == "move" ? true : false, // bDeleteSourceRecord
out output_timestamp,
out strOutputRecPath,
out strError);
if (lRet == -1)
{
if (channel.ErrorCode == ChannelErrorCode.NotFound)
continue;
strError = "复制" + this.ItemName + "记录 '" + info.RecPath + "' 时发生错误: " + strError;
goto ERROR1;
//.........这里部分代码省略.........
示例4: DoBiblioOperMove
//.........这里部分代码省略.........
goto ERROR1;
}
try
{
domNew.LoadXml(strNewBiblio);
}
catch (Exception ex)
{
strError = "strNewBiblio装载进入DOM时发生错误: " + ex.Message;
goto ERROR1;
}
* */
// 只有order权限的情况
if (StringUtil.IsInList("setbiblioinfo", sessioninfo.RightsOrigin) == false
&& StringUtil.IsInList("order", sessioninfo.RightsOrigin) == true)
{
if (strAction == "onlymovebiblio"
|| strAction == "move")
{
string strSourceDbName = ResPath.GetDbName(strOldRecPath);
// 源头书目库为 非工作库 情况
if (IsOrderWorkBiblioDb(strSourceDbName) == false)
{
// 非工作库不能删除记录
if (IsOrderWorkBiblioDb(strSourceDbName) == false)
{
// 非工作库。要求原来记录不存在
strError = "当前帐户只有order权限而没有setbiblioinfo权限,不能用" + strAction + "功能删除源书目记录 '" + strOldRecPath + "'";
goto ERROR1;
}
}
}
}
// 移动记录
byte[] output_timestamp = null;
string strIdChangeList = "";
// TODO: Copy后还要写一次?因为Copy并不写入新记录。
// 其实Copy的意义在于带走资源。否则还不如用Save+Delete
lRet = channel.DoCopyRecord(strOldRecPath,
strNewRecPath,
strAction == "onlymovebiblio" || strAction == "move" ? true : false, // bDeleteSourceRecord
strMergeStyle,
out strIdChangeList,
out output_timestamp,
out strOutputRecPath,
out strError);
if (lRet == -1)
{
strError = "DoCopyRecord() error :" + strError;
goto ERROR1;
}
// TODO: 兑现对 856 字段的合并,和来自源的 856 字段的 $u 修改
if (String.IsNullOrEmpty(strNewBiblio) == false)
{
this.BiblioLocks.LockForWrite(strOutputRecPath);
try
{
// TODO: 如果新的、已存在的xml没有不同,或者新的xml为空,则这步保存可以省略
string strOutputBiblioRecPath = "";
lRet = channel.DoSaveTextRes(strOutputRecPath,
strNewBiblio,
false,
"content", // ,ignorechecktimestamp
output_timestamp,
out baOutputTimestamp,
out strOutputBiblioRecPath,
out strError);
if (lRet == -1)
goto ERROR1;
}
finally
{
this.BiblioLocks.UnlockForWrite(strOutputRecPath);
}
}
{
// TODO: 是否和前面一起锁定?
byte[] exist_target_timestamp = null;
// 获取最后的记录
lRet = channel.GetRes(strOutputRecPath,
out strOutputTargetXml,
out strMetaData,
out exist_target_timestamp,
out strOutputPath,
out strError);
}
return 0;
ERROR1:
return -1;
}
示例5: CopyBiblioChildRecords
//.........这里部分代码省略.........
try
{
dom.LoadXml(info.OldRecord);
}
catch (Exception ex)
{
strError = "记录 '" + info.RecPath + "' 装入XMLDOM发生错误: " + ex.Message;
goto ERROR1;
}
DomUtil.SetElementText(dom.DocumentElement,
"parent",
strParentID);
// 复制的情况,要避免出现操作后的条码号重复现象
if (strAction == "copy")
{
// 修改册条码号,避免发生条码号重复
string strOldItemBarcode = DomUtil.GetElementText(dom.DocumentElement,
"barcode");
if (String.IsNullOrEmpty(strOldItemBarcode) == false)
{
// 2014/1/5
if (string.IsNullOrEmpty(strNewBarcode) == true)
strNewBarcode = "temp_" + strOldItemBarcode;
DomUtil.SetElementText(dom.DocumentElement,
"barcode",
strNewBarcode);
}
// 2014/1/5
DomUtil.SetElementText(dom.DocumentElement,
"refID",
null);
// 把借者清除
// (源实体记录中如果有借阅信息,在普通界面上是无法删除此记录的。只能用出纳窗正规进行归还,然后才能删除)
{
DomUtil.SetElementText(dom.DocumentElement,
"borrower",
null);
DomUtil.SetElementText(dom.DocumentElement,
"borrowPeriod",
null);
DomUtil.SetElementText(dom.DocumentElement,
"borrowDate",
null);
}
}
// TODO: 可以顺便确认有没有对象资源。如果没有,就省略CopyRecord操作
long lRet = channel.DoCopyRecord(info.RecPath,
strTargetRecPath,
strAction == "move" ? true : false, // bDeleteSourceRecord
out output_timestamp,
out strOutputRecPath,
out strError);
if (lRet == -1)
{
if (channel.ErrorCode == ChannelErrorCode.NotFound)
continue;
strError = "复制实体记录 '" + info.RecPath + "' 时发生错误: " + strError;
goto ERROR1;
}
// 修改xml记录。<parent>元素发生了变化
byte[] baOutputTimestamp = null;
string strOutputRecPath1 = "";
lRet = channel.DoSaveTextRes(strOutputRecPath,
dom.OuterXml,
false,
"content", // ,ignorechecktimestamp
output_timestamp,
out baOutputTimestamp,
out strOutputRecPath1,
out strError);
if (lRet == -1)
goto ERROR1;
oldrecordpaths.Add(info.RecPath);
newrecordpaths.Add(strOutputRecPath);
parentids.Add(strParentID);
if (strAction == "move")
oldrecords.Add(info.OldRecord);
}
finally
{
this.EntityLocks.UnlockForWrite(info.ItemBarcode);
}
nOperCount++;
}
return nOperCount;
ERROR1:
// 不要Undo
return -1;
}
示例6: CopyBiblioChildEntities
//.........这里部分代码省略.........
if (String.IsNullOrEmpty(strOldItemBarcode) == false)
{
strNewBarcode = strOldItemBarcode + "_" + Guid.NewGuid().ToString();
DomUtil.SetElementText(dom.DocumentElement,
"barcode",
strNewBarcode);
}
// *** 后面这几个清除动作要作为规则出现
// 清除 refid
DomUtil.SetElementText(dom.DocumentElement,
"refID",
null);
// 把借者清除
// (源实体记录中如果有借阅信息,在普通界面上是无法删除此记录的。只能用出纳窗正规进行归还,然后才能删除)
{
DomUtil.SetElementText(dom.DocumentElement,
"borrower",
null);
DomUtil.SetElementText(dom.DocumentElement,
"borrowPeriod",
null);
DomUtil.SetElementText(dom.DocumentElement,
"borrowDate",
null);
}
}
// TODO: 可以顺便确认有没有对象资源。如果没有,就省略CopyRecord操作
long lRet = channel.DoCopyRecord(info.RecPath,
strTargetItemDbName + "/?",
strAction == "move" ? true : false, // bDeleteSourceRecord
out output_timestamp,
out strOutputRecPath,
out strError);
if (lRet == -1)
{
if (channel.ErrorCode == ChannelErrorCode.NotFound)
continue;
strError = "复制实体记录 '" + info.RecPath + "' 时发生错误: " + strError;
goto ERROR1;
}
// 修改xml记录。<parent>元素发生了变化
byte[] baOutputTimestamp = null;
string strOutputRecPath1 = "";
lRet = channel.DoSaveTextRes(strOutputRecPath,
dom.OuterXml,
false,
"content", // ,ignorechecktimestamp
output_timestamp,
out baOutputTimestamp,
out strOutputRecPath1,
out strError);
if (lRet == -1)
goto ERROR1;
oldrecordpaths.Add(info.RecPath);
newrecordpaths.Add(strOutputRecPath);
parentids.Add(strParentID);
示例7: DoEntityOperMove
//.........这里部分代码省略.........
// -1 出错
// 0 没有找到
// 1 找到
nRet = GetBiblioDbNameByItemDbName(strEntityDbName,
out strBiblioDbName,
out strError);
if (nRet == 0 || nRet == -1)
{
strError = "根据实体库名 '" + strEntityDbName + "' 中获得书目库名时失败";
goto ERROR1;
}
// 非工作库
if (IsOrderWorkBiblioDb(strBiblioDbName) == false)
{
// 非工作库。要求<state>包含“加工中”
string strState = DomUtil.GetElementText(domSourceExist.DocumentElement,
"state");
if (IncludeStateProcessing(strState) == false)
{
strError = "当前帐户只有order权限而没有setiteminfo(或setentities)权限,不能用move功能删除从属于非工作库的、状态不包含“加工中”的实体记录 '" + info.OldRecPath + "'";
goto ERROR1;
}
}
// TODO: 如果原样移动,目标记录并不被修改,似乎也该允许?
}
// 移动记录
byte[] output_timestamp = null;
// TODO: Copy后还要写一次?因为Copy并不写入新记录。(注:Copy/Move有时候会跨库,这样记录中<parent>需要改变)
// 其实Copy的意义在于带走资源。否则还不如用Save+Delete
lRet = channel.DoCopyRecord(info.OldRecPath,
info.NewRecPath,
true, // bDeleteSourceRecord
out output_timestamp,
out strOutputPath,
out strError);
if (lRet == -1)
{
strError = "DoCopyRecord() error :" + strError;
goto ERROR1;
}
string strTargetLibraryCode = "";
// 检查一个册记录的馆藏地点是否符合馆代码列表要求
// return:
// -1 检查过程出错
// 0 符合要求
// 1 不符合要求
nRet = CheckItemLibraryCode(strNewXml,
sessioninfo,
// sessioninfo.LibraryCodeList,
out strTargetLibraryCode,
out strError);
if (nRet == -1)
goto ERROR1;
// 2014/7/3
if (this.VerifyBookType == true)
{
string strEntityDbName = ResPath.GetDbName(info.NewRecPath);
if (String.IsNullOrEmpty(strEntityDbName) == true)
{
strError = "从路径 '" + info.NewRecPath + "' 中获得数据库名时失败";