private static void _processPackage(AstPackageBaseNode package) { packageName = new AstVariableNode(package) { Name = "PackageName", IsSystemVariable = true, TypeCode = TypeCode.String }; packageGuid = new AstVariableNode(package) { Name = "PackageID", IsSystemVariable = true, TypeCode = TypeCode.String }; parentPackageGuid = new AstVariableNode(package) { Name = "_parentPackageGuid", TypeCode = TypeCode.String, Value = String.Empty, InheritFromPackageParentConfigurationString = "System::PackageID" }; source = new AstVariableNode(package) { Name = "SourceName", TypeCode = TypeCode.String, IsSystemVariable = true }; sourceID = new AstVariableNode(package) { Name = "SourceID", TypeCode = TypeCode.String, IsSystemVariable = true }; parentSourceID = new AstVariableNode(package) { Name = "ParentContainerGUID", TypeCode = TypeCode.String, IsSystemVariable = true }; machineName = new AstVariableNode(package) { Name = "MachineName", TypeCode = TypeCode.String, IsSystemVariable = true }; userName = new AstVariableNode(package) { Name = "UserName", TypeCode = TypeCode.String, IsSystemVariable = true }; patchedExecutionGuid = new AstVariableNode(package) { Name = "_patchedExecutionGuid", TypeCode = TypeCode.String, Value = "@[User::_executionGuid] == \"\" ? @[System::ExecutionInstanceGUID] : @[User::_executionGuid]", EvaluateAsExpression = true }; executionGuid = new AstVariableNode(package) { Name = "_executionGuid", TypeCode = TypeCode.String, Value = String.Empty, InheritFromPackageParentConfigurationString = "User::_patchedExecutionGuid" }; errorDescription = new AstVariableNode(package) { Name = "ErrorDescription", TypeCode = TypeCode.String, IsSystemVariable = true }; package.Variables.Add(executionGuid); package.Variables.Add(parentPackageGuid); package.Variables.Add(patchedExecutionGuid); if (package.LogConnection != null) { _packageBuildOnPreExecuteEvent(package); _packageBuildOnErrorEvent(package); _packageBuildOnEndEvent(package); } }
private static void _packageBuildOnPreExecuteEvent(AstPackageBaseNode package) { var packageEvent = ContainerFindEvent(package.Events, EventType.OnPreExecute); if (packageEvent == null) { packageEvent = new AstTaskEventHandlerNode(package) { EventType = EventType.OnPreExecute }; package.Events.Add(packageEvent); } var preExecContainer = new AstContainerTaskNode(packageEvent) { Name = "OnPreExec", ConstraintMode = ContainerConstraintMode.Linear }; packageEvent.Tasks.Insert(0, preExecContainer); var constrainedCont = new AstContainerTaskNode(packageEvent) { Name = "ConstrainedContainer", ConstraintMode = ContainerConstraintMode.Parallel }; preExecContainer.Tasks.Add(constrainedCont); var executeSql = new AstExecuteSqlTaskNode(preExecContainer) { Name = "Exec usp_PackageStart", ExecuteDuringDesignTime = false, Connection = package.LogConnection }; executeSql.PrecedenceConstraints = new AstTaskflowPrecedenceConstraintsNode(executeSql); executeSql.PrecedenceConstraints.Inputs.Add( new AstTaskflowInputPathNode(executeSql.PrecedenceConstraints) { Expression = "@[System::PackageID] == @[System::SourceID]", EvaluationOperation = TaskEvaluationOperationType.Expression, OutputPath = constrainedCont.OutputPath }); executeSql.Query = new AstExecuteSqlQueryNode(executeSql) { Body = "\"EXEC usp_PackageStart \" + (@[System::PackageName] == \"\" ? \"NULL\" : \"'\"+@[System::PackageName]+\"'\") +\",\"+(@[System::PackageID] == \"\" ? \"NULL\" : \"'\"+@[System::PackageID]+\"'\") +\",\"+(@[User::_parentPackageGuid] == \"\" ? \"NULL\" : \"'\"+@[User::_parentPackageGuid]+\"'\") +\",\"+(@[System::SourceName] == \"\" ? \"NULL\" : \"'\"+@[System::SourceName]+\"'\") +\",\"+(@[System::SourceID] == \"\" ? \"NULL\" : \"'\"+@[System::SourceID]+\"'\") +\",\"+(@[System::SourceParentGUID] == \"\" ? \"NULL\" : \"'\"+@[System::SourceParentGUID]+\"'\") +\",\"+ (@[System::MachineName] == \"\" ? \"NULL\" : \"'\"+@[System::MachineName]+\"'\") +\",\"+(@[System::UserName] == \"\" ? \"NULL\" : \"'\"+@[System::UserName]+\"'\") +\",\"+(@[User::_patchedExecutionGuid] == \"\" ? \"NULL\" : \"'\"+@[User::_patchedExecutionGuid])+\"'\"", QueryType = QueryType.Expression }; preExecContainer.Tasks.Add(executeSql); }
private static void _packageBuildOnErrorEvent(AstPackageBaseNode package) { var packageEvent = ContainerFindEvent(package.Events, EventType.OnError); if (packageEvent == null) { packageEvent = new AstTaskEventHandlerNode(package) { EventType = EventType.OnError }; package.Events.Add(packageEvent); } var executeSql = new AstExecuteSqlTaskNode(packageEvent) { Name = "Exec usp_PackageError", ExecuteDuringDesignTime = false, Connection = package.LogConnection }; executeSql.Query = new AstExecuteSqlQueryNode(executeSql) { Body = "\"EXECUTE [usp_PackageError] ?,?,?,?,?,?,?,?,?,? \"", QueryType = QueryType.Expression }; executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "0", Direction = Direction.Input, Variable = packageName, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "1", Direction = Direction.Input, Variable = packageGuid, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "2", Direction = Direction.Input, Variable = parentPackageGuid, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "3", Direction = Direction.Input, Variable = source, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "4", Direction = Direction.Input, Variable = sourceID, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "5", Direction = Direction.Input, Variable = parentSourceID, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "6", Direction = Direction.Input, Variable = machineName, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "7", Direction = Direction.Input, Variable = userName, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "8", Direction = Direction.Input, Variable = patchedExecutionGuid, Length = 255 }); executeSql.Query.Parameters.Add(new AstExecuteSqlParameterMappingTypeNode(executeSql.Query) { Name = "9", Direction = Direction.Input, Variable = errorDescription, Length = -1 }); packageEvent.Tasks.Insert(0, executeSql); }