Ejemplo n.º 1
0
        // アクティビティが値を返す場合は、CodeActivity<TResult> から派生して、
        // Execute メソッドから値を返します。
        protected override FileMappingInfo Execute(CodeActivityContext context)
        {
            IWorkflowContext workflowContext = context.GetExtension <IWorkflowContext>();
            var repo = new FileMappingInfoRepository(workflowContext.DbContext);

            string keyType  = this.KeyType.Get(context);
            string keyValue = this.KeyValue.Get(context);

            FileMappingInfo returnEntity = null;

            switch (keyType)
            {
            case "Id":
                returnEntity = repo.Load(long.Parse(keyValue));
                if (returnEntity == null)
                {
                    LOG.WarnFormat("FileMappingInfoの読み込みに失敗しました。 Id={0}", long.Parse(keyValue));
                }
                break;

            case "AclHash":
                returnEntity = repo.LoadByAclHash(keyValue);
                if (returnEntity == null)
                {
                    LOG.WarnFormat("FileMappingInfoの読み込みに失敗しました。 AclHash={0}", keyValue);
                }
                break;

            case "MappingFilePath":
                returnEntity = repo.LoadByPath(keyValue);
                if (returnEntity == null)
                {
                    LOG.WarnFormat("FileMappingInfoの読み込みに失敗しました。 MappingFilePath={0}", keyValue);
                }
                break;

            default:
                throw new ApplicationException("キータイプの指定が不正です");
            }

            var resultKey = this.ParameterResultKey.Get(context);

            if (resultKey != null)
            {
                ParameterStack pstack = context.GetValue <ParameterStack>(this.Parameter);
                pstack.SetValue(resultKey, returnEntity);
            }

            return(returnEntity);
        }
        /// <summary>
        /// LLD-03-05-01:01-02-01
        /// </summary>
        /// <param name="item"></param>
        /// <param name="workspace"></param>
        private void file_remove_acl(AppDbContext dbc, FileUpdateQueueItem item, Workspace workspace)
        {
            var aclfileLocalPath_Remove = workspace.TrimWorekspacePath(item.Target.FullName, false);
            var vrPath_Remove           = Path.Combine(Path.GetDirectoryName(aclfileLocalPath_Remove), Path.GetFileNameWithoutExtension(aclfileLocalPath_Remove));

            // 1. 削除したファイルパスと一致するファイルマッピング情報を取得する

            var repo = new FileMappingInfoRepository(dbc);
            var fmi  = repo.LoadByPath(vrPath_Remove);

            // 2. ファイルマッピング情報から、物理空間のファイルを特定する
            var phyFilePath = Path.Combine(workspace.PhysicalSpacePath, vrPath_Remove);

            // 3. 物理空間のファイルを削除する
            File.Delete(phyFilePath);

            // 4. ファイルマッピング情報をデータベースから削除する
            repo.Delete(fmi);
            dbc.SaveChanges();
        }