Add dockerized host deploy flow and fix Blazor static boot assets
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
**/bin/
|
||||
**/obj/
|
||||
**/.vs/
|
||||
**/.idea/
|
||||
**/*.user
|
||||
**/*.suo
|
||||
**/*.cache
|
||||
**/TestResults/
|
||||
**/test-results/
|
||||
**/playwright-report/
|
||||
**/node_modules/
|
||||
|
||||
.git
|
||||
|
||||
# Local deployment runtime artifacts should stay on host, not in image context
|
||||
/deploy/docker/runtime-config/
|
||||
/deploy/docker/runtime-logs/
|
||||
@@ -0,0 +1,30 @@
|
||||
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
||||
WORKDIR /src
|
||||
|
||||
COPY . .
|
||||
RUN dotnet restore src/JdeScoping.Host/JdeScoping.Host.csproj
|
||||
RUN dotnet publish src/JdeScoping.Host/JdeScoping.Host.csproj -c Release -o /app/publish --no-restore
|
||||
RUN set -eux; \
|
||||
fw="/app/publish/wwwroot/_framework"; \
|
||||
wasm_js="$(find "$fw" -maxdepth 1 -type f -name 'blazor.webassembly.*.js' | head -n 1)"; \
|
||||
[ -n "$wasm_js" ]; \
|
||||
cp "$wasm_js" "$fw/blazor.webassembly.js"; \
|
||||
dotnet_js="$(find "$fw" -maxdepth 1 -type f -name 'dotnet.*.js' ! -name 'dotnet.native.*.js' ! -name 'dotnet.runtime.*.js' | head -n 1)"; \
|
||||
[ -n "$dotnet_js" ]; \
|
||||
cp "$dotnet_js" "$fw/dotnet.js"; \
|
||||
dotnet_native_js="$(find "$fw" -maxdepth 1 -type f -name 'dotnet.native.*.js' | head -n 1)"; \
|
||||
[ -n "$dotnet_native_js" ]; \
|
||||
cp "$dotnet_native_js" "$fw/dotnet.native.js"; \
|
||||
dotnet_runtime_js="$(find "$fw" -maxdepth 1 -type f -name 'dotnet.runtime.*.js' | head -n 1)"; \
|
||||
[ -n "$dotnet_runtime_js" ]; \
|
||||
cp "$dotnet_runtime_js" "$fw/dotnet.runtime.js"
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=build /app/publish/ ./
|
||||
|
||||
EXPOSE 8080
|
||||
ENV ASPNETCORE_URLS=http://+:8080
|
||||
|
||||
ENTRYPOINT ["dotnet", "JdeScoping.Host.dll"]
|
||||
@@ -0,0 +1,63 @@
|
||||
# JdeScoping Host Local Docker Deploy
|
||||
|
||||
This folder contains a repeatable Docker Compose workflow for the `.NET 10` host (`JdeScoping.Host`) that serves the API + Blazor UI.
|
||||
|
||||
## Location
|
||||
|
||||
- Docker assets: `/Users/dohertj2/Desktop/JdeScopingTool/NEW/deploy/docker`
|
||||
- Runtime config mount: `/Users/dohertj2/Desktop/JdeScopingTool/NEW/deploy/docker/runtime-config`
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Docker Desktop (or Docker Engine + Compose plugin)
|
||||
2. Local SQL container running on host port `1434` (for example `scopingtool-sqlserver`)
|
||||
|
||||
## Commands
|
||||
|
||||
Run commands from `/Users/dohertj2/Desktop/JdeScopingTool/NEW/deploy/docker`.
|
||||
|
||||
| Action | Command |
|
||||
|---|---|
|
||||
| Initial deploy (build + run) | `./deploy-host.sh deploy` |
|
||||
| Deploy without rebuild | `./deploy-host.sh deploy --no-build` |
|
||||
| Start container | `./deploy-host.sh start` |
|
||||
| Stop container | `./deploy-host.sh stop` |
|
||||
| Restart/redeploy (build) | `./deploy-host.sh restart` |
|
||||
| Restart/redeploy (no build) | `./deploy-host.sh restart --no-build` |
|
||||
| Force rebuild + recreate | `./deploy-host.sh rebuild` |
|
||||
| Show status | `./deploy-host.sh status` |
|
||||
| Stream logs | `./deploy-host.sh logs` |
|
||||
| Destroy container/network | `./deploy-host.sh destroy` |
|
||||
| Destroy container/network/volumes | `./deploy-host.sh destroy --volumes` |
|
||||
|
||||
## Runtime Config Layout
|
||||
|
||||
The container uses bind mounts so config updates do not require rebuilding the image.
|
||||
|
||||
- `runtime-config/appsettings.json` mapped to `/app/appsettings.json` (read-only)
|
||||
- `runtime-config/appsettings.Development.json` mapped to `/app/appsettings.Development.json` (read-only)
|
||||
- `runtime-config/Pipelines/pipeline.*.json` mapped to `/app/config/Pipelines` (read-only)
|
||||
- `runtime-config/data/secrets.json` mapped to `/app/config/data/secrets.json`
|
||||
- `runtime-config/data/secrets.key` mapped to `/app/config/data/secrets.key`
|
||||
|
||||
## Local DB Connectivity
|
||||
|
||||
Default local deployment expects SQL Server to be reachable from the container at:
|
||||
|
||||
- `host.docker.internal:1434`
|
||||
|
||||
`compose.yaml` also adds:
|
||||
|
||||
- `host.docker.internal:host-gateway`
|
||||
|
||||
If your SQL endpoint differs, update the relevant connection string values in SecureStore (`runtime-config/data/secrets.json`) before deploying.
|
||||
|
||||
## Health Check
|
||||
|
||||
After deploy:
|
||||
|
||||
```bash
|
||||
curl http://localhost:5294/health
|
||||
```
|
||||
|
||||
A valid response confirms the host is reachable (status may be `Healthy`, `Degraded`, or `Unhealthy` depending on dependency state).
|
||||
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
jdescoping-host:
|
||||
container_name: jdescoping-host
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: deploy/docker/Dockerfile
|
||||
image: jdescoping-host:local
|
||||
ports:
|
||||
- "5294:8080"
|
||||
environment:
|
||||
ASPNETCORE_URLS: "http://+:8080"
|
||||
ASPNETCORE_ENVIRONMENT: "Development"
|
||||
DataSync__PipelinesDirectory: "/app/config/Pipelines"
|
||||
SecureStore__StorePath: "/app/config/data/secrets.json"
|
||||
SecureStore__KeyFilePath: "/app/config/data/secrets.key"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- ./runtime-config/appsettings.json:/app/appsettings.json:ro
|
||||
- ./runtime-config/appsettings.Development.json:/app/appsettings.Development.json:ro
|
||||
- ./runtime-config/Pipelines:/app/config/Pipelines:ro
|
||||
- ./runtime-config/data:/app/config/data
|
||||
- ${LOGS_DIR:-./runtime-logs}:/app/logs
|
||||
restart: unless-stopped
|
||||
Executable
+133
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
COMPOSE_FILE="$SCRIPT_DIR/compose.yaml"
|
||||
SERVICE_NAME="jdescoping-host"
|
||||
|
||||
show_help() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [command] [options]
|
||||
|
||||
Commands:
|
||||
deploy Build image (default) and deploy container
|
||||
start Start existing container
|
||||
stop Stop running container
|
||||
restart Redeploy container (build by default)
|
||||
rebuild Force rebuild image and recreate container
|
||||
logs Stream container logs
|
||||
status Show container status
|
||||
destroy Remove container; add --volumes to remove volumes
|
||||
help Show this help
|
||||
|
||||
Options:
|
||||
--no-build Skip image build for deploy/restart
|
||||
--volumes With destroy, also remove named volumes
|
||||
-h, --help Show this help
|
||||
USAGE
|
||||
}
|
||||
|
||||
ensure_compose() {
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "docker is not installed or not in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker compose version >/dev/null 2>&1; then
|
||||
echo "docker compose is not available" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
compose() {
|
||||
docker compose -f "$COMPOSE_FILE" "$@"
|
||||
}
|
||||
|
||||
command="deploy"
|
||||
no_build="false"
|
||||
remove_volumes="false"
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
command="$1"
|
||||
shift
|
||||
fi
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--no-build)
|
||||
no_build="true"
|
||||
;;
|
||||
--volumes)
|
||||
remove_volumes="true"
|
||||
;;
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1" >&2
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
ensure_compose
|
||||
|
||||
case "$command" in
|
||||
deploy)
|
||||
if [[ "$no_build" == "true" ]]; then
|
||||
compose up -d --force-recreate --no-build "$SERVICE_NAME"
|
||||
else
|
||||
compose up -d --build --force-recreate "$SERVICE_NAME"
|
||||
fi
|
||||
;;
|
||||
|
||||
start)
|
||||
compose start "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
stop)
|
||||
compose stop "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
restart)
|
||||
if [[ "$no_build" == "true" ]]; then
|
||||
compose up -d --force-recreate --no-build "$SERVICE_NAME"
|
||||
else
|
||||
compose up -d --build --force-recreate "$SERVICE_NAME"
|
||||
fi
|
||||
;;
|
||||
|
||||
rebuild)
|
||||
compose build --no-cache "$SERVICE_NAME"
|
||||
compose up -d --force-recreate --no-build "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
logs)
|
||||
compose logs -f "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
status)
|
||||
compose ps "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
destroy)
|
||||
if [[ "$remove_volumes" == "true" ]]; then
|
||||
compose down --volumes --remove-orphans
|
||||
else
|
||||
compose down --remove-orphans
|
||||
fi
|
||||
;;
|
||||
|
||||
help)
|
||||
show_help
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown command: $command" >&2
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "Branch",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(wc.MCMCU) AS Code, TRIM(wc.MCDL01) AS Description, wc.MCUPMJ AS LastUpdateDate, wc.MCUPMT AS LastUpdateTime FROM {ProductionSchema}.F0006 wc WHERE wc.MCSTYL = 'BP' AND (wc.MCUPMJ > :dateUpdated OR (wc.MCUPMJ = :dateUpdated AND wc.MCUPMT >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(wc.MCMCU) AS Code, TRIM(wc.MCDL01) AS Description, wc.MCUPMJ AS LastUpdateDate, wc.MCUPMT AS LastUpdateTime FROM {ProductionSchema}.F0006 wc WHERE wc.MCSTYL = 'BP'",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "Branch",
|
||||
"matchColumns": ["Code"],
|
||||
"excludeFromUpdate": ["Code", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "FunctionCode",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT Code, TRIM(LISTAGG(Description, ' ') WITHIN GROUP(ORDER BY Description) || CASE WHEN MAX(total_lengthb) > 4000 THEN '...' ELSE '' END) Description, SYSDATE AS LastUpdateDT FROM (SELECT TRIM(fc.CFKY) AS Code, TRIM(ASCIISTR(fc.CFDS80)) AS Description, SUM(LENGTHB(TRIM(fc.CFDS80))+1) OVER(PARTITION BY TRIM(fc.CFKY) ORDER BY TRIM(fc.CFDS80)) - 1 cumul_lengthb, SUM(LENGTHB(TRIM(fc.CFDS80))+1) OVER(PARTITION BY TRIM(fc.CFKY)) - 1 total_lengthb, COUNT(*) OVER(PARTITION BY TRIM(fc.CFKY)) num_values FROM PRODDTA.F00192 fc WHERE TRIM(fc.CFKY) IS NOT NULL) WHERE total_lengthb <= 4000 OR cumul_lengthb <= 4000 - length('...') GROUP BY Code",
|
||||
"massQuery": "SELECT Code, TRIM(LISTAGG(Description, ' ') WITHIN GROUP(ORDER BY Description) || CASE WHEN MAX(total_lengthb) > 4000 THEN '...' ELSE '' END) Description, SYSDATE AS LastUpdateDT FROM (SELECT TRIM(fc.CFKY) AS Code, TRIM(ASCIISTR(fc.CFDS80)) AS Description, SUM(LENGTHB(TRIM(fc.CFDS80))+1) OVER(PARTITION BY TRIM(fc.CFKY) ORDER BY TRIM(fc.CFDS80)) - 1 cumul_lengthb, SUM(LENGTHB(TRIM(fc.CFDS80))+1) OVER(PARTITION BY TRIM(fc.CFKY)) - 1 total_lengthb, COUNT(*) OVER(PARTITION BY TRIM(fc.CFKY)) num_values FROM PRODDTA.F00192 fc WHERE TRIM(fc.CFKY) IS NOT NULL) WHERE total_lengthb <= 4000 OR cumul_lengthb <= 4000 - length('...') GROUP BY Code",
|
||||
"parameters": {}
|
||||
},
|
||||
"destination": {
|
||||
"table": "FunctionCode",
|
||||
"matchColumns": ["Code"],
|
||||
"excludeFromUpdate": ["Code", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "Item",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT pn.IMITM AS ShortItemNumber, TRIM(pn.IMLITM) AS ItemNumber, TRIM(pn.IMDSC1) AS Description, TRIM(pn.IMPRP4) AS PlanningFamily, TRIM(pn.IMSTKT) AS StockingType, pn.IMUPMJ AS LastUpdateDate, pn.IMTDAY AS LastUpdateTime FROM {ProductionSchema}.F4101 pn WHERE TRIM(pn.IMLITM) IS NOT NULL AND (pn.IMUPMJ > :dateUpdated OR (pn.IMUPMJ = :dateUpdated AND pn.IMTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT pn.IMITM AS ShortItemNumber, TRIM(pn.IMLITM) AS ItemNumber, TRIM(pn.IMDSC1) AS Description, TRIM(pn.IMPRP4) AS PlanningFamily, TRIM(pn.IMSTKT) AS StockingType, pn.IMUPMJ AS LastUpdateDate, pn.IMTDAY AS LastUpdateTime FROM {ProductionSchema}.F4101 pn WHERE TRIM(pn.IMLITM) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "Item",
|
||||
"matchColumns": ["ShortItemNumber"],
|
||||
"excludeFromUpdate": ["ShortItemNumber", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "JdeUser",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "WITH USER_CTE AS (SELECT ab.ABAN8 AS AddressNumber, TRIM(pro.ULUSER) AS UserId, TRIM(ab.ABALPH) AS FullName, ab.ABUPMJ AS LastUpdateDate, ab.ABUPMT AS LastUpdateTime, ROW_NUMBER() OVER (PARTITION BY ab.ABAN8 ORDER BY ab.ABUPMJ DESC, ab.ABUPMT DESC) RN FROM {ProductionSchema}.F0101 ab LEFT OUTER JOIN {ProductionSchema}.F0092 pro ON (ab.ABAN8 = pro.ULAN8) WHERE ab.ABATE = 'Y') SELECT AddressNumber, UserId, FullName, LastUpdateDate, LastUpdateTime FROM USER_CTE WHERE RN = 1",
|
||||
"massQuery": "WITH USER_CTE AS (SELECT ab.ABAN8 AS AddressNumber, TRIM(pro.ULUSER) AS UserId, TRIM(ab.ABALPH) AS FullName, ab.ABUPMJ AS LastUpdateDate, ab.ABUPMT AS LastUpdateTime, ROW_NUMBER() OVER (PARTITION BY ab.ABAN8 ORDER BY ab.ABUPMJ DESC, ab.ABUPMT DESC) RN FROM {ProductionSchema}.F0101 ab LEFT OUTER JOIN {ProductionSchema}.F0092 pro ON (ab.ABAN8 = pro.ULAN8) WHERE ab.ABATE = 'Y') SELECT AddressNumber, UserId, FullName, LastUpdateDate, LastUpdateTime FROM USER_CTE WHERE RN = 1",
|
||||
"parameters": {}
|
||||
},
|
||||
"destination": {
|
||||
"table": "JdeUser",
|
||||
"matchColumns": ["AddressNumber"],
|
||||
"excludeFromUpdate": ["AddressNumber", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "Lot",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(lot.IOLOTN) AS LotNumber, TRIM(lot.IOMCU) AS BranchCode, lot.IOITM AS ShortItemNumber, TRIM(lot.IOLITM) AS ItemNumber, lot.IOVEND AS SupplierCode, lot.IOLOTS AS StatusCode, TRIM(lot.IOLOT1) AS Memo1, TRIM(lot.IOLOT2) AS Memo2, TRIM(lot.IOLOT3) AS Memo3, lot.IOUPMJ AS LastUpdateDate, lot.IOTDAY AS LastUpdateTime FROM {ProductionSchema}.F4108 lot WHERE TRIM(lot.IOLOTN) IS NOT NULL AND TRIM(lot.IOMCU) IS NOT NULL AND (lot.IOUPMJ > :dateUpdated OR (lot.IOUPMJ = :dateUpdated AND lot.IOTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(lot.IOLOTN) AS LotNumber, TRIM(lot.IOMCU) AS BranchCode, lot.IOITM AS ShortItemNumber, TRIM(lot.IOLITM) AS ItemNumber, lot.IOVEND AS SupplierCode, lot.IOLOTS AS StatusCode, TRIM(lot.IOLOT1) AS Memo1, TRIM(lot.IOLOT2) AS Memo2, TRIM(lot.IOLOT3) AS Memo3, lot.IOUPMJ AS LastUpdateDate, lot.IOTDAY AS LastUpdateTime FROM {ProductionSchema}.F4108 lot WHERE TRIM(lot.IOLOTN) IS NOT NULL AND TRIM(lot.IOMCU) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "Lot",
|
||||
"matchColumns": ["LotNumber", "BranchCode"],
|
||||
"excludeFromUpdate": ["LotNumber", "BranchCode", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "LotUsage_Curr",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT lu.ILUKID AS UniqueId, lu.ILDOCO AS WorkOrderNumber, TRIM(lu.ILLOTN) AS LotNumber, TRIM(lu.ILMCU) AS BranchCode, lu.ILITM AS ShortItemNumber, lu.ILTRQT AS Quantity, lu.ILTRDJ AS LastUpdateDate, lu.ILTDAY AS LastUpdateTime FROM {ProductionSchema}.F4111 lu WHERE lu.ILDCT = 'IM' AND TRIM(lu.ILLOTN) IS NOT NULL AND (lu.ILTRDJ > :dateUpdated OR (lu.ILTRDJ = :dateUpdated AND lu.ILTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT lu.ILUKID AS UniqueId, lu.ILDOCO AS WorkOrderNumber, TRIM(lu.ILLOTN) AS LotNumber, TRIM(lu.ILMCU) AS BranchCode, lu.ILITM AS ShortItemNumber, lu.ILTRQT AS Quantity, lu.ILTRDJ AS LastUpdateDate, lu.ILTDAY AS LastUpdateTime FROM {ProductionSchema}.F4111 lu WHERE lu.ILDCT = 'IM' AND TRIM(lu.ILLOTN) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "LotUsage_Curr",
|
||||
"matchColumns": ["UniqueId"],
|
||||
"excludeFromUpdate": ["UniqueId", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "MisData_Curr",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 100800,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": null,
|
||||
"source": {
|
||||
"connection": "cms",
|
||||
"query": "SELECT DISTINCT mis.P_PART_NUMBER AS ItemNumber, mis.P_OPERATION_NUMBER AS SequenceNumber, item.PITEM_ID AS MISNumber, itemrev.PITEM_REVISION_ID AS RevID, TRIM(mis.P_SITE) AS BranchCode, zim_test_details.P_SEQ_NUMBER AS CharNumber, zim_test_details.P_TEST_DESC AS TestDescription, zim_test_details.P_SAMPL_TYPE AS SamplingType, zim_test_details.P_SAMPL_VALUE AS SamplingValue, zim_test_details.P_TOOLS AS ToolsGauges, zim_test_details.P_WORK_INTR AS WorkInstructions, Status.PNAME AS Status, Status.PDATE_RELEASED AS ReleaseDate FROM INFODBA.PITEM item INNER JOIN INFODBA.PITEMREVISION itemrev ON (item.PUID = itemrev.RITEMS_TAGU) INNER JOIN INFODBA.PRELEASE_STATUS_LIST listing ON (itemrev.PUID = listing.PUID) INNER JOIN INFODBA.PRELEASESTATUS Status ON (listing.PVALU_0 = Status.PUID) INNER JOIN INFODBA.PIMANRELATION imanrel ON (itemrev.PUID = imanrel.RPRIMARY_OBJECTU) INNER JOIN INFODBA.PFORM form ON (imanrel.RSECONDARY_OBJECTU = form.PUID) INNER JOIN INFODBA.PZIMMERMISDETAILS zim_mis ON (form.RDATA_FILEU = zim_mis.PUID) INNER JOIN INFODBA.P_TEST_DETAILS test_details ON (zim_mis.PUID = test_details.PUID) INNER JOIN INFODBA.P_PART_ASSOCIATION ppa ON (ppa.PUID = test_details.PUID) INNER JOIN INFODBA.PMISDATAOBJECT mis ON (mis.PUID = ppa.PVALU_0) INNER JOIN INFODBA.PZIMTESTDETAILS zim_test_details ON (test_details.PVALU_0 = zim_test_details.PUID) WHERE Status.PNAME = 'Current' AND Status.PDATE_RELEASED >= :lastUpdateDT",
|
||||
"massQuery": "SELECT DISTINCT mis.P_PART_NUMBER AS ItemNumber, mis.P_OPERATION_NUMBER AS SequenceNumber, item.PITEM_ID AS MISNumber, itemrev.PITEM_REVISION_ID AS RevID, TRIM(mis.P_SITE) AS BranchCode, zim_test_details.P_SEQ_NUMBER AS CharNumber, zim_test_details.P_TEST_DESC AS TestDescription, zim_test_details.P_SAMPL_TYPE AS SamplingType, zim_test_details.P_SAMPL_VALUE AS SamplingValue, zim_test_details.P_TOOLS AS ToolsGauges, zim_test_details.P_WORK_INTR AS WorkInstructions, Status.PNAME AS Status, Status.PDATE_RELEASED AS ReleaseDate FROM INFODBA.PITEM item INNER JOIN INFODBA.PITEMREVISION itemrev ON (item.PUID = itemrev.RITEMS_TAGU) INNER JOIN INFODBA.PRELEASE_STATUS_LIST listing ON (itemrev.PUID = listing.PUID) INNER JOIN INFODBA.PRELEASESTATUS Status ON (listing.PVALU_0 = Status.PUID) INNER JOIN INFODBA.PIMANRELATION imanrel ON (itemrev.PUID = imanrel.RPRIMARY_OBJECTU) INNER JOIN INFODBA.PFORM form ON (imanrel.RSECONDARY_OBJECTU = form.PUID) INNER JOIN INFODBA.PZIMMERMISDETAILS zim_mis ON (form.RDATA_FILEU = zim_mis.PUID) INNER JOIN INFODBA.P_TEST_DETAILS test_details ON (zim_mis.PUID = test_details.PUID) INNER JOIN INFODBA.P_PART_ASSOCIATION ppa ON (ppa.PUID = test_details.PUID) INNER JOIN INFODBA.PMISDATAOBJECT mis ON (mis.PUID = ppa.PVALU_0) INNER JOIN INFODBA.PZIMTESTDETAILS zim_test_details ON (test_details.PVALU_0 = zim_test_details.PUID) WHERE Status.PNAME = 'Current'",
|
||||
"parameters": {
|
||||
"lastUpdateDT": { "name": ":lastUpdateDT", "format": null, "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "MisData_Curr",
|
||||
"matchColumns": ["ItemNumber", "BranchCode", "SequenceNumber", "MisNumber", "CharNumber"],
|
||||
"excludeFromUpdate": []
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": [
|
||||
{ "connection": "lotfinder", "script": "SET ANSI_WARNINGS OFF; WITH cte AS (SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released FROM dbo.MisData_Curr AS md GROUP BY md.MisNumber, md.RevID, md.Status) UPDATE dbo.MisData_Curr SET ObsoleteDate = bl.Released FROM cte bl WHERE MisData_Curr.MisNumber = bl.MisNumber AND MisData_Curr.RevID = bl.RevID AND MisData_Curr.Status = 'Current' AND bl.Status = 'BackLevel';" },
|
||||
{ "connection": "lotfinder", "script": "WITH cte AS (SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released FROM dbo.MisData_Curr AS md GROUP BY md.MisNumber, md.RevID, md.Status) UPDATE dbo.MisData_Curr SET ObsoleteDate = (SELECT TOP 1 nl.Released FROM cte nl WHERE MisData_Curr.MisNumber = nl.MisNumber AND MisData_Curr.RevID < nl.RevID AND MisData_Curr.Status = nl.Status ORDER BY nl.RevID) WHERE ObsoleteDate IS NULL;" },
|
||||
{ "connection": "lotfinder", "script": "MERGE INTO dbo.MisData_Hist AS target USING (SELECT * FROM dbo.MisData_Curr WHERE Status = 'BackLevel') AS source ON target.ItemNumber = source.ItemNumber AND target.BranchCode = source.BranchCode AND target.SequenceNumber = source.SequenceNumber AND target.MisNumber = source.MisNumber AND target.CharNumber = source.CharNumber WHEN MATCHED THEN UPDATE SET target.RevID = source.RevID, target.TestDescription = source.TestDescription, target.SamplingType = source.SamplingType, target.SamplingValue = source.SamplingValue, target.ToolsGauges = source.ToolsGauges, target.WorkInstructions = source.WorkInstructions, target.Status = source.Status, target.ReleaseDate = source.ReleaseDate, target.ObsoleteDate = source.ObsoleteDate WHEN NOT MATCHED THEN INSERT (ItemNumber, BranchCode, SequenceNumber, MisNumber, RevID, CharNumber, TestDescription, SamplingType, SamplingValue, ToolsGauges, WorkInstructions, Status, ReleaseDate, ObsoleteDate) VALUES (source.ItemNumber, source.BranchCode, source.SequenceNumber, source.MisNumber, source.RevID, source.CharNumber, source.TestDescription, source.SamplingType, source.SamplingValue, source.ToolsGauges, source.WorkInstructions, source.Status, source.ReleaseDate, source.ObsoleteDate);" },
|
||||
{ "connection": "lotfinder", "script": "DELETE FROM dbo.MisData_Curr WHERE Status = 'BackLevel';" },
|
||||
{ "connection": "lotfinder", "script": "ALTER INDEX [PK_MisData_Curr] ON [dbo].[MisData_Curr] REBUILD;" }
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "MisData_Hist",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 100800,
|
||||
"dailySyncIntervalMinutes": null,
|
||||
"hourlySyncIntervalMinutes": null,
|
||||
"source": {
|
||||
"connection": "cms",
|
||||
"query": "SELECT DISTINCT mis.P_PART_NUMBER AS ItemNumber, mis.P_OPERATION_NUMBER AS SequenceNumber, item.PITEM_ID AS MISNumber, itemrev.PITEM_REVISION_ID AS RevID, TRIM(mis.P_SITE) AS BranchCode, zim_test_details.P_SEQ_NUMBER AS CharNumber, zim_test_details.P_TEST_DESC AS TestDescription, zim_test_details.P_SAMPL_TYPE AS SamplingType, zim_test_details.P_SAMPL_VALUE AS SamplingValue, zim_test_details.P_TOOLS AS ToolsGauges, zim_test_details.P_WORK_INTR AS WorkInstructions, Status.PNAME AS Status, Status.PDATE_RELEASED AS ReleaseDate FROM INFODBA.PITEM item INNER JOIN INFODBA.PITEMREVISION itemrev ON (item.PUID = itemrev.RITEMS_TAGU) INNER JOIN INFODBA.PRELEASE_STATUS_LIST listing ON (itemrev.PUID = listing.PUID) INNER JOIN INFODBA.PRELEASESTATUS Status ON (listing.PVALU_0 = Status.PUID) INNER JOIN INFODBA.PIMANRELATION imanrel ON (itemrev.PUID = imanrel.RPRIMARY_OBJECTU) INNER JOIN INFODBA.PFORM form ON (imanrel.RSECONDARY_OBJECTU = form.PUID) INNER JOIN INFODBA.PZIMMERMISDETAILS zim_mis ON (form.RDATA_FILEU = zim_mis.PUID) INNER JOIN INFODBA.P_TEST_DETAILS test_details ON (zim_mis.PUID = test_details.PUID) INNER JOIN INFODBA.P_PART_ASSOCIATION ppa ON (ppa.PUID = test_details.PUID) INNER JOIN INFODBA.PMISDATAOBJECT mis ON (mis.PUID = ppa.PVALU_0) INNER JOIN INFODBA.PZIMTESTDETAILS zim_test_details ON (test_details.PVALU_0 = zim_test_details.PUID) WHERE Status.PNAME = 'BackLevel' AND Status.PDATE_RELEASED >= :lastUpdateDT",
|
||||
"massQuery": "SELECT DISTINCT mis.P_PART_NUMBER AS ItemNumber, mis.P_OPERATION_NUMBER AS SequenceNumber, item.PITEM_ID AS MISNumber, itemrev.PITEM_REVISION_ID AS RevID, TRIM(mis.P_SITE) AS BranchCode, zim_test_details.P_SEQ_NUMBER AS CharNumber, zim_test_details.P_TEST_DESC AS TestDescription, zim_test_details.P_SAMPL_TYPE AS SamplingType, zim_test_details.P_SAMPL_VALUE AS SamplingValue, zim_test_details.P_TOOLS AS ToolsGauges, zim_test_details.P_WORK_INTR AS WorkInstructions, Status.PNAME AS Status, Status.PDATE_RELEASED AS ReleaseDate FROM INFODBA.PITEM item INNER JOIN INFODBA.PITEMREVISION itemrev ON (item.PUID = itemrev.RITEMS_TAGU) INNER JOIN INFODBA.PRELEASE_STATUS_LIST listing ON (itemrev.PUID = listing.PUID) INNER JOIN INFODBA.PRELEASESTATUS Status ON (listing.PVALU_0 = Status.PUID) INNER JOIN INFODBA.PIMANRELATION imanrel ON (itemrev.PUID = imanrel.RPRIMARY_OBJECTU) INNER JOIN INFODBA.PFORM form ON (imanrel.RSECONDARY_OBJECTU = form.PUID) INNER JOIN INFODBA.PZIMMERMISDETAILS zim_mis ON (form.RDATA_FILEU = zim_mis.PUID) INNER JOIN INFODBA.P_TEST_DETAILS test_details ON (zim_mis.PUID = test_details.PUID) INNER JOIN INFODBA.P_PART_ASSOCIATION ppa ON (ppa.PUID = test_details.PUID) INNER JOIN INFODBA.PMISDATAOBJECT mis ON (mis.PUID = ppa.PVALU_0) INNER JOIN INFODBA.PZIMTESTDETAILS zim_test_details ON (test_details.PVALU_0 = zim_test_details.PUID) WHERE Status.PNAME = 'BackLevel'",
|
||||
"parameters": {
|
||||
"lastUpdateDT": { "name": ":lastUpdateDT", "format": null, "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "MisData_Hist",
|
||||
"matchColumns": ["ItemNumber", "BranchCode", "SequenceNumber", "MisNumber", "CharNumber"],
|
||||
"excludeFromUpdate": []
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": [
|
||||
{ "connection": "lotfinder", "script": "SET ANSI_WARNINGS OFF; WITH cte AS (SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released FROM dbo.MisData_Hist AS md GROUP BY md.MisNumber, md.RevID, md.Status) UPDATE dbo.MisData_Hist SET ObsoleteDate = bl.Released FROM cte bl WHERE MisData_Hist.MisNumber = bl.MisNumber AND MisData_Hist.RevID = bl.RevID AND MisData_Hist.Status = 'Current' AND bl.Status = 'BackLevel';" },
|
||||
{ "connection": "lotfinder", "script": "WITH cte AS (SELECT md.MisNumber, md.RevID, md.Status, MIN(md.ReleaseDate) Released FROM dbo.MisData_Hist AS md GROUP BY md.MisNumber, md.RevID, md.Status) UPDATE dbo.MisData_Hist SET ObsoleteDate = (SELECT TOP 1 nl.Released FROM cte nl WHERE MisData_Hist.MisNumber = nl.MisNumber AND MisData_Hist.RevID < nl.RevID AND MisData_Hist.Status = nl.Status ORDER BY nl.RevID) WHERE ObsoleteDate IS NULL;" },
|
||||
{ "connection": "lotfinder", "script": "ALTER INDEX [PK_MisData_Hist] ON [dbo].[MisData_Hist] REBUILD;" }
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "OrgHierarchy",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(oh.DISPATCHGROUP_IWMCUW) AS ProfitCenterCode, TRIM(oh.COSTCENTER_IWMCU) AS WorkCenterCode, TRIM(oh.COSTCENTERALT_IWMMCU) AS BranchCode, oh.DATEUPDATED_IWUPMJ AS DateUpdated, oh.TIMEOFDAY_IWTDAY AS TimeUpdated FROM JDESTAGE.F30006_VIEW oh WHERE TRIM(oh.COSTCENTER_IWMCU) IS NOT NULL AND TRIM(oh.COSTCENTERALT_IWMMCU) IS NOT NULL AND (oh.DATEUPDATED_IWUPMJ > :dateUpdated OR (oh.DATEUPDATED_IWUPMJ = :dateUpdated AND oh.TIMEOFDAY_IWTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(oh.DISPATCHGROUP_IWMCUW) AS ProfitCenterCode, TRIM(oh.COSTCENTER_IWMCU) AS WorkCenterCode, TRIM(oh.COSTCENTERALT_IWMMCU) AS BranchCode, oh.DATEUPDATED_IWUPMJ AS DateUpdated, oh.TIMEOFDAY_IWTDAY AS TimeUpdated FROM JDESTAGE.F30006_VIEW oh WHERE TRIM(oh.COSTCENTER_IWMCU) IS NOT NULL AND TRIM(oh.COSTCENTERALT_IWMMCU) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "OrgHierarchy",
|
||||
"matchColumns": ["WorkCenterCode", "BranchCode"],
|
||||
"excludeFromUpdate": ["WorkCenterCode", "BranchCode", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "ProfitCenter",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(wc.MCMCU) AS Code, TRIM(wc.MCDL01) AS Description, wc.MCUPMJ AS LastUpdateDate, wc.MCUPMT AS LastUpdateTime FROM {ProductionSchema}.F0006 wc WHERE wc.MCSTYL = 'I3' AND (wc.MCUPMJ > :dateUpdated OR (wc.MCUPMJ = :dateUpdated AND wc.MCUPMT >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(wc.MCMCU) AS Code, TRIM(wc.MCDL01) AS Description, wc.MCUPMJ AS LastUpdateDate, wc.MCUPMT AS LastUpdateTime FROM {ProductionSchema}.F0006 wc WHERE wc.MCSTYL = 'I3'",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "ProfitCenter",
|
||||
"matchColumns": ["Code"],
|
||||
"excludeFromUpdate": ["Code", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "RouteMaster",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(route_master.COSTCENTERALT_IRMMCU) AS BranchCode, TRIM(route_master.ITEMNUMBER2NDKIT_IRKITL) AS ItemNumber, TRIM(route_master.TYPEROUTING_IRTRT) AS RoutingType, route_master.SEQUENCENOOPERATIONS_IROPSQ AS SequenceNumber, TRIM(route_master.USERRESERVEDREFERENCE_IRURRF) AS FunctionCode, TRIM(route_master.COSTCENTER_IRMCU) AS WorkCenterCode, route_master.EFFECTIVEFROMDATE_IREFFF AS StartDate, route_master.EFFECTIVETHRUDATE_IREFFT AS EndDate, route_master.DATEUPDATED_IRUPMJ AS DateUpdated, route_master.TIMEOFDAY_IRTDAY AS TimeUpdated FROM JDESTAGE.F3003_VIEW route_master WHERE TRIM(route_master.ITEMNUMBER2NDKIT_IRKITL) IS NOT NULL AND (route_master.DATEUPDATED_IRUPMJ > :dateUpdated OR (route_master.DATEUPDATED_IRUPMJ = :dateUpdated AND route_master.TIMEOFDAY_IRTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(route_master.COSTCENTERALT_IRMMCU) AS BranchCode, TRIM(route_master.ITEMNUMBER2NDKIT_IRKITL) AS ItemNumber, TRIM(route_master.TYPEROUTING_IRTRT) AS RoutingType, route_master.SEQUENCENOOPERATIONS_IROPSQ AS SequenceNumber, TRIM(route_master.USERRESERVEDREFERENCE_IRURRF) AS FunctionCode, TRIM(route_master.COSTCENTER_IRMCU) AS WorkCenterCode, route_master.EFFECTIVEFROMDATE_IREFFF AS StartDate, route_master.EFFECTIVETHRUDATE_IREFFT AS EndDate, route_master.DATEUPDATED_IRUPMJ AS DateUpdated, route_master.TIMEOFDAY_IRTDAY AS TimeUpdated FROM JDESTAGE.F3003_VIEW route_master WHERE TRIM(route_master.ITEMNUMBER2NDKIT_IRKITL) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "RouteMaster",
|
||||
"matchColumns": ["BranchCode", "ItemNumber", "RoutingType", "SequenceNumber"],
|
||||
"excludeFromUpdate": ["BranchCode", "ItemNumber", "RoutingType", "SequenceNumber", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "StatusCode",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "giw",
|
||||
"query": "SELECT TRIM(sc.USERDEFINEDCODE_DRKY) AS Code, TRIM(sc.DESCRIPTION001_DRDL01) AS Description, sc.DATEUPDATED_DRUPMJ AS DateUpdated, sc.TIMELASTUPDATED_DRUPMT AS TimeUpdated FROM JDESTAGE.F0005_VIEW sc WHERE TRIM(sc.PRODUCTCODE_DRSY) = '00' AND sc.USERDEFINEDCODES_DRRT = 'SS' AND TRIM(sc.USERDEFINEDCODE_DRKY) IS NOT NULL AND (sc.DATEUPDATED_DRUPMJ > :dateUpdated OR (sc.DATEUPDATED_DRUPMJ = :dateUpdated AND sc.TIMELASTUPDATED_DRUPMT >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(sc.USERDEFINEDCODE_DRKY) AS Code, TRIM(sc.DESCRIPTION001_DRDL01) AS Description, sc.DATEUPDATED_DRUPMJ AS DateUpdated, sc.TIMELASTUPDATED_DRUPMT AS TimeUpdated FROM JDESTAGE.F0005_VIEW sc WHERE TRIM(sc.PRODUCTCODE_DRSY) = '00' AND sc.USERDEFINEDCODES_DRRT = 'SS' AND TRIM(sc.USERDEFINEDCODE_DRKY) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "StatusCode",
|
||||
"matchColumns": ["Code"],
|
||||
"excludeFromUpdate": ["Code", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "WorkCenter",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(wc.MCMCU) AS Code, TRIM(wc.MCDL01) AS Description, wc.MCUPMJ AS LastUpdateDate, wc.MCUPMT AS LastUpdateTime FROM {ProductionSchema}.F0006 wc WHERE wc.MCSTYL = 'WC' AND (wc.MCUPMJ > :dateUpdated OR (wc.MCUPMJ = :dateUpdated AND wc.MCUPMT >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(wc.MCMCU) AS Code, TRIM(wc.MCDL01) AS Description, wc.MCUPMJ AS LastUpdateDate, wc.MCUPMT AS LastUpdateTime FROM {ProductionSchema}.F0006 wc WHERE wc.MCSTYL = 'WC'",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "WorkCenter",
|
||||
"matchColumns": ["Code"],
|
||||
"excludeFromUpdate": ["Code", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "WorkOrderComponent_Curr",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT woc.UNIQUEKEYIDINTERNAL_WMUKID AS UniqueID, woc.DOCUMENTORDERINVOICEE_WMDOCO AS WorkOrderNumber, TRIM(woc.LOT_WMLOTN) AS LotNumber, TRIM(woc.BRANCHCOMPONENT_WMCMCU) AS BranchCode, woc.COMPONENTITEMNOSHORT_WMCPIT AS ShortItemNumber, woc.QUANTITYTRANSACTION_WMTRQT AS Quantity, woc.DATEUPDATED_WMUPMJ AS DateUpdated, woc.TIMEOFDAY_WMTDAY AS TimeUpdated FROM JDESTAGE.F3111_VIEW woc WHERE TRIM(woc.LOT_WMLOTN) IS NOT NULL AND (woc.DATEUPDATED_WMUPMJ > :dateUpdated OR (woc.DATEUPDATED_WMUPMJ = :dateUpdated AND woc.TIMEOFDAY_WMTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT woc.UNIQUEKEYIDINTERNAL_WMUKID AS UniqueID, woc.DOCUMENTORDERINVOICEE_WMDOCO AS WorkOrderNumber, TRIM(woc.LOT_WMLOTN) AS LotNumber, TRIM(woc.BRANCHCOMPONENT_WMCMCU) AS BranchCode, woc.COMPONENTITEMNOSHORT_WMCPIT AS ShortItemNumber, woc.QUANTITYTRANSACTION_WMTRQT AS Quantity, woc.DATEUPDATED_WMUPMJ AS DateUpdated, woc.TIMEOFDAY_WMTDAY AS TimeUpdated FROM JDESTAGE.F3111_VIEW woc WHERE TRIM(woc.LOT_WMLOTN) IS NOT NULL",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "WorkOrderComponent_Curr",
|
||||
"matchColumns": ["UniqueID"],
|
||||
"excludeFromUpdate": ["UniqueID", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "WorkOrderRouting",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT TRIM(woz.EDIUSERID_SZEDUS) AS UserID, TRIM(woz.EDIBATCHNUMBER_SZEDBT) AS BatchNumber, TRIM(woz.EDITRANSACTNUMBER_SZEDTN) AS TransactionNumber, woz.EDILINENUMBER_SZEDLN AS LineNumber, woz.SEQUENCENOOPERATIONS_SZOPSQ AS StepNumber, TRIM(woz.COSTCENTER_SZMCU) AS WorkCenterCode, woz.DOCUMENTORDERINVOICEE_SZDOCO AS WorkOrderNumber, TRIM(woz.TYPEROUTING_SZTRT) AS RoutingType, TRIM(woz.COSTCENTERALT_SZMMCU) AS BranchCode, TRIM(woz.DESCRIPTIONLINE1_SZDSC1) AS StepDescription, TRIM(woz.USERRESERVEDREFERENCE_SZURRF) AS FunctionCode, woz.DATETRANSACTIONJULIAN_SZTRDJ AS TransactionDate, woz.DATEUPDATED_SZUPMJ AS DateUpdated, woz.TIMEOFDAY_SZTDAY AS TimeUpdated FROM JDESTAGE.F3112Z1_VIEW woz WHERE woz.TYPETRANSACTION_SZTYTN = 'JDERTG' AND woz.DIRECTIONINDICATOR_SZDRIN = '2' AND woz.TRANSACTIONACTION_SZTNAC = '02' AND woz.PROGRAMID_SZPID = 'ER31410' AND (woz.DATEUPDATED_SZUPMJ > :dateUpdated OR (woz.DATEUPDATED_SZUPMJ = :dateUpdated AND woz.TIMEOFDAY_SZTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT TRIM(woz.EDIUSERID_SZEDUS) AS UserID, TRIM(woz.EDIBATCHNUMBER_SZEDBT) AS BatchNumber, TRIM(woz.EDITRANSACTNUMBER_SZEDTN) AS TransactionNumber, woz.EDILINENUMBER_SZEDLN AS LineNumber, woz.SEQUENCENOOPERATIONS_SZOPSQ AS StepNumber, TRIM(woz.COSTCENTER_SZMCU) AS WorkCenterCode, woz.DOCUMENTORDERINVOICEE_SZDOCO AS WorkOrderNumber, TRIM(woz.TYPEROUTING_SZTRT) AS RoutingType, TRIM(woz.COSTCENTERALT_SZMMCU) AS BranchCode, TRIM(woz.DESCRIPTIONLINE1_SZDSC1) AS StepDescription, TRIM(woz.USERRESERVEDREFERENCE_SZURRF) AS FunctionCode, woz.DATETRANSACTIONJULIAN_SZTRDJ AS TransactionDate, woz.DATEUPDATED_SZUPMJ AS DateUpdated, woz.TIMEOFDAY_SZTDAY AS TimeUpdated FROM JDESTAGE.F3112Z1_VIEW woz WHERE woz.TYPETRANSACTION_SZTYTN = 'JDERTG' AND woz.DIRECTIONINDICATOR_SZDRIN = '2' AND woz.TRANSACTIONACTION_SZTNAC = '02' AND woz.PROGRAMID_SZPID = 'ER31410'",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "WorkOrderRouting",
|
||||
"matchColumns": ["UserID", "BatchNumber", "TransactionNumber", "LineNumber"],
|
||||
"excludeFromUpdate": ["UserID", "BatchNumber", "TransactionNumber", "LineNumber", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "WorkOrderStep_Curr",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT wos.DOCUMENTORDERINVOICEE_WLDOCO AS WorkOrderNumber, TRIM(wos.COSTCENTERALT_WLMMCU) AS BranchCode, TRIM(wos.COSTCENTER_WLMCU) AS WorkCenterCode, wos.SEQUENCENOOPERATIONS_WLOPSQ AS StepNumber, TRIM(wos.DESCRIPTIONLINE1_WLDSC1) AS StepDescription, TRIM(mes.DESCRIPT80CHARACTERS_CFDS80) AS FunctionOperationDescription, wos.TYPEOPERATIONCODE_WLOPSC AS StepTypeCode, CASE wos.DATESTART_WLSTRT WHEN TO_DATE('1900-01-01', 'yyyy-MM-dd') THEN NULL ELSE wos.DATESTART_WLSTRT END AS StartDT, CASE wos.DATECOMPLETION_WLSTRX WHEN TO_DATE('1900-01-01', 'yyyy-MM-dd') THEN NULL ELSE wos.DATECOMPLETION_WLSTRX END AS EndDT, TRIM(wos.USERRESERVEDREFERENCE_WLURRF) AS FunctionCode, wos.DATEUPDATED_WLUPMJ AS DateUpdated, wos.TIMEOFDAY_WLTDAY AS TimeUpdated FROM JDESTAGE.F3112_VIEW wos LEFT OUTER JOIN JDESTAGE.F00192_VIEW mes ON (wos.USERRESERVEDREFERENCE_WLURRF = mes.USERDEFINEDCODE_CFKY) WHERE (wos.DATEUPDATED_WLUPMJ > :dateUpdated OR (wos.DATEUPDATED_WLUPMJ = :dateUpdated AND wos.TIMEOFDAY_WLTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT wos.DOCUMENTORDERINVOICEE_WLDOCO AS WorkOrderNumber, TRIM(wos.COSTCENTERALT_WLMMCU) AS BranchCode, TRIM(wos.COSTCENTER_WLMCU) AS WorkCenterCode, wos.SEQUENCENOOPERATIONS_WLOPSQ AS StepNumber, TRIM(wos.DESCRIPTIONLINE1_WLDSC1) AS StepDescription, TRIM(mes.DESCRIPT80CHARACTERS_CFDS80) AS FunctionOperationDescription, wos.TYPEOPERATIONCODE_WLOPSC AS StepTypeCode, CASE wos.DATESTART_WLSTRT WHEN TO_DATE('1900-01-01', 'yyyy-MM-dd') THEN NULL ELSE wos.DATESTART_WLSTRT END AS StartDT, CASE wos.DATECOMPLETION_WLSTRX WHEN TO_DATE('1900-01-01', 'yyyy-MM-dd') THEN NULL ELSE wos.DATECOMPLETION_WLSTRX END AS EndDT, TRIM(wos.USERRESERVEDREFERENCE_WLURRF) AS FunctionCode, wos.DATEUPDATED_WLUPMJ AS DateUpdated, wos.TIMEOFDAY_WLTDAY AS TimeUpdated FROM JDESTAGE.F3112_VIEW wos LEFT OUTER JOIN JDESTAGE.F00192_VIEW mes ON (wos.USERRESERVEDREFERENCE_WLURRF = mes.USERDEFINEDCODE_CFKY)",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "WorkOrderStep_Curr",
|
||||
"matchColumns": ["WorkOrderNumber", "BranchCode", "StepNumber"],
|
||||
"excludeFromUpdate": ["WorkOrderNumber", "BranchCode", "StepNumber", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "WorkOrderTime_Curr",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT wot.UNIQUEKEYIDINTERNAL_WTUKID AS UniqueID, TRIM(wot.COSTCENTERALT_WTMMCU) AS BranchCode, wot.DOCUMENTORDERINVOICEE_WTDOCO AS WorkOrderNumber, wot.SEQUENCENOOPERATIONS_WTOPSQ AS StepNumber, wot.ADDRESSNUMBER_WTAN8 AS AddressNumber, wot.DTFORGLANDVOUCH1_WTDGL AS GlDate, wot.DATEUPDATED_WTUPMJ AS DateUpdated, wot.TIMEOFDAY_WTTDAY AS TimeUpdated FROM JDESTAGE.F31122_VIEW wot WHERE (wot.DATEUPDATED_WTUPMJ > :dateUpdated OR (wot.DATEUPDATED_WTUPMJ = :dateUpdated AND wot.TIMEOFDAY_WTTDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT wot.UNIQUEKEYIDINTERNAL_WTUKID AS UniqueID, TRIM(wot.COSTCENTERALT_WTMMCU) AS BranchCode, wot.DOCUMENTORDERINVOICEE_WTDOCO AS WorkOrderNumber, wot.SEQUENCENOOPERATIONS_WTOPSQ AS StepNumber, wot.ADDRESSNUMBER_WTAN8 AS AddressNumber, wot.DTFORGLANDVOUCH1_WTDGL AS GlDate, wot.DATEUPDATED_WTUPMJ AS DateUpdated, wot.TIMEOFDAY_WTTDAY AS TimeUpdated FROM JDESTAGE.F31122_VIEW wot",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "WorkOrderTime_Curr",
|
||||
"matchColumns": ["UniqueID"],
|
||||
"excludeFromUpdate": ["UniqueID", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "WorkOrder_Curr",
|
||||
"isEnabled": true,
|
||||
"isManualOnly": false,
|
||||
"massSyncIntervalMinutes": 10080,
|
||||
"dailySyncIntervalMinutes": 1440,
|
||||
"hourlySyncIntervalMinutes": 60,
|
||||
"source": {
|
||||
"connection": "jde",
|
||||
"query": "SELECT wo.WADOCO AS WorkOrderNumber, TRIM(wo.WAMMCU) AS BranchCode, TRIM(wo.WALOTN) AS LotNumber, TRIM(wo.WALITM) AS ItemNumber, wo.WAITM AS ShortItemNumber, TRIM(wo.WAPARS) AS ParentWorkOrderNumber, wo.WAUORG / 100.0 AS OrderQuantity, wo.WASOBK / 100.0 AS HeldQuantity, wo.WASOQS / 100.0 AS ShippedQuantity, TRIM(wo.WASRST) AS StatusCode, CASE wo.WADCG WHEN 0 THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(wo.WADCG+1900000,'YYYYDDD') END AS StatusCodeUpdateDT, CASE wo.WATRDJ WHEN 0 THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(wo.WATRDJ+1900000,'YYYYDDD') END AS IssueDate, CASE wo.WASTRT WHEN 0 THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(wo.WASTRT+1900000,'YYYYDDD') END AS StartDate, TRIM(wo.WATRT) AS RoutingType, wo.WAUPMJ AS LastUpdateDate, wo.WATDAY AS LastUpdateTime FROM {ProductionSchema}.F4801 wo WHERE (wo.WAUPMJ > :dateUpdated OR (wo.WAUPMJ = :dateUpdated AND wo.WATDAY >= :timeUpdated))",
|
||||
"massQuery": "SELECT wo.WADOCO AS WorkOrderNumber, TRIM(wo.WAMMCU) AS BranchCode, TRIM(wo.WALOTN) AS LotNumber, TRIM(wo.WALITM) AS ItemNumber, wo.WAITM AS ShortItemNumber, TRIM(wo.WAPARS) AS ParentWorkOrderNumber, wo.WAUORG / 100.0 AS OrderQuantity, wo.WASOBK / 100.0 AS HeldQuantity, wo.WASOQS / 100.0 AS ShippedQuantity, TRIM(wo.WASRST) AS StatusCode, CASE wo.WADCG WHEN 0 THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(wo.WADCG+1900000,'YYYYDDD') END AS StatusCodeUpdateDT, CASE wo.WATRDJ WHEN 0 THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(wo.WATRDJ+1900000,'YYYYDDD') END AS IssueDate, CASE wo.WASTRT WHEN 0 THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(wo.WASTRT+1900000,'YYYYDDD') END AS StartDate, TRIM(wo.WATRT) AS RoutingType, wo.WAUPMJ AS LastUpdateDate, wo.WATDAY AS LastUpdateTime FROM {ProductionSchema}.F4801 wo",
|
||||
"parameters": {
|
||||
"dateUpdated": { "name": ":dateUpdated", "format": "jdeJulian", "source": "offset" },
|
||||
"timeUpdated": { "name": ":timeUpdated", "format": "jdeTime", "source": "offset" }
|
||||
}
|
||||
},
|
||||
"destination": {
|
||||
"table": "WorkOrder_Curr",
|
||||
"matchColumns": ["WorkOrderNumber", "BranchCode"],
|
||||
"excludeFromUpdate": ["WorkOrderNumber", "BranchCode", "LastUpdateDt"]
|
||||
},
|
||||
"preScripts": [],
|
||||
"postScripts": []
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"LotFinder": "Server=host.docker.internal,1434;Database=ScopingTool;User Id=scopingapp;Password=Sc0ping@pp_Dev#2024;TrustServerCertificate=true",
|
||||
"LotFinderDB": "Server=host.docker.internal,1434;Database=ScopingTool;User Id=scopingapp;Password=Sc0ping@pp_Dev#2024;TrustServerCertificate=true",
|
||||
"SqlServer": "Server=host.docker.internal,1434;Database=ScopingTool;User Id=scopingapp;Password=Sc0ping@pp_Dev#2024;TrustServerCertificate=true",
|
||||
"GIW": "Data Source=localhost:1521/GIW;User Id=placeholder;Password=placeholder"
|
||||
},
|
||||
"DataAccess": {
|
||||
"CommandTimeoutSeconds": 120,
|
||||
"EnableDetailedLogging": true
|
||||
},
|
||||
"DataSync": {
|
||||
"Enabled": true,
|
||||
"PipelinesDirectory": "/app/config/Pipelines",
|
||||
"StrictPipelineValidation": true,
|
||||
"CheckInterval": "00:01:00",
|
||||
"MaxDegreeOfParallelism": 8,
|
||||
"BatchSize": 1000000,
|
||||
"BulkCopyBatchSize": 10000,
|
||||
"LookbackMultiplier": 3,
|
||||
"PurgeRetentionDays": 30,
|
||||
"SyncTimeoutSeconds": 3600
|
||||
},
|
||||
"Auth": {
|
||||
"CookieName": "ScopingTool.Auth",
|
||||
"CookieExpirationMinutes": 480
|
||||
},
|
||||
"Ldap": {
|
||||
"ServerUrls": ["ldap.corp.example.com"],
|
||||
"GroupDn": "CN=ScopingTool-Users,OU=Groups,DC=corp,DC=example,DC=com",
|
||||
"SearchBase": "DC=corp,DC=example,DC=com",
|
||||
"ConnectionTimeoutSeconds": 30,
|
||||
"UseFakeAuth": true,
|
||||
"AdminBypassUsers": []
|
||||
},
|
||||
"ExcelExport": {
|
||||
"TempDirectory": "/tmp/lotfinder",
|
||||
"MaxRowsPerSheet": 1048576,
|
||||
"DefaultDateFormat": "yyyy-MM-dd HH:mm:ss"
|
||||
},
|
||||
"SearchProcessing": {
|
||||
"PollingIntervalSeconds": 5,
|
||||
"MaxConcurrentSearches": 2,
|
||||
"SearchTimeoutMinutes": 30
|
||||
},
|
||||
"DataSource": {
|
||||
"UseFileDataSource": true,
|
||||
"FileDirectory": "DevData"
|
||||
},
|
||||
"SecureStore": {
|
||||
"StorePath": "data/secrets.json",
|
||||
"KeyFilePath": "data/secrets.key",
|
||||
"AutoCreateStore": true,
|
||||
"RequiredKeys": [
|
||||
"ExcelExport:CriteriaSheetPassword",
|
||||
"ExcelExport:DataSheetPassword"
|
||||
]
|
||||
},
|
||||
"WorkProcessor": {
|
||||
"Enabled": true,
|
||||
"WorkInterval": "00:00:05",
|
||||
"SearchTimeout": "00:05:00",
|
||||
"PurgeRetentionDays": 7
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/* Intentionally present to avoid 404 when no CSS isolation bundle is generated. */
|
||||
@@ -37,7 +37,7 @@
|
||||
<!-- Radzen Blazor JS -->
|
||||
<script src="_content/Radzen.Blazor/Radzen.Blazor.js"></script>
|
||||
|
||||
<script src="_framework/blazor.webassembly#[.{fingerprint}].js"></script>
|
||||
<script src="_framework/blazor.webassembly.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -96,6 +96,8 @@ try
|
||||
// Configure Web API middleware (authentication, authorization, controllers, SignalR hub)
|
||||
app.UseWebApi();
|
||||
|
||||
// .NET 10 static asset endpoint mapping supports fingerprinted Blazor assets.
|
||||
app.MapStaticAssets();
|
||||
app.MapRazorPages();
|
||||
app.MapFallbackToFile("index.html");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user